在这段代码中发生了什么?它非常混乱。
#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
是一个编译时断言。现在是将它们组合起来的时候了 :) - chris