如何在编译时确认自动推理类型的假设? (即static_assert样式

时间:2014-06-18 21:59:34

标签: c++ c++11 compile-time static-assert

有时,我会将函数的返回值分配给auto类型的变量(例如auto returnValue = someFunction();),但 仍然 我想澄清/强制执行关于该变量类型的某些假设 - 即它是int类型。

While Concepts& type_traits提供了一些非常强大的静态假设验证功能,它们不支持这样的东西:

static_assert( isType( returnValue, int ) );
//OR
static_assert( int == typeof( returnValue ) );

我该怎么做?

2 个答案:

答案 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
}