有时,我会将函数的返回值分配给auto
类型的变量(例如auto returnValue = someFunction();
),但 仍然 我想澄清/强制执行关于该变量类型的某些假设 - 即它是int
类型。
While Concepts& type_traits提供了一些非常强大的静态假设验证功能,它们不支持这样的东西:
static_assert( isType( returnValue, int ) );
//OR
static_assert( int == typeof( returnValue ) );
我该怎么做?
答案 0 :(得分:7)
您可以在此处使用类型特征,即std::is_same
:
static_assert( std::is_same<int, decltype( returnValue ) >:: value , "Error, Bad Type");
演示here。
答案 1 :(得分:0)
这样的事情应该可以解决问题...
int fn1()
{
return 0;
}
long fn2()
{
return 0;
}
void main(int argc, char* argv[])
{
auto r1 = fn1();
static_assert( std::is_same<int, decltype(r1)>::value, "Bad type" ); // OK
auto r2 = fn2();
static_assert( std::is_same<int, decltype(r2)>::value, "Bad type" ); // FAILED assertion
}