【发布时间】:2013-05-26 18:15:36
【问题描述】:
这段代码发生了什么?太混乱了。
#include <utility>
struct check
{
template <typename T>
auto foo() -> decltype(std::declval<T>().value, void())
{
static_assert(T{}.value == 10, "Incorrect value");
}
} var;
int main()
{
struct apple
{
int value{10};
};
var.foo<apple>();
}
特别是它具有-> 的部分以及之后的所有内容。
【问题讨论】:
-
-> 是尾随返回类型。
declval创建一个类的实例。decltype查找编译时表达式的类型。static_assert是一个编译时断言。是时候把它们拼凑起来了:) -
模糊的标题对其他有同样问题的人没有用处。
-
@RiaD:虽然标题编辑更有帮助,但仍然不准确 - 他似乎在询问特定用途。
-
对标题进行了编辑,提示“函数原型之后的 -> 是什么意思?”。