static_assert中的decltype

时间:2011-02-21 19:31:56

标签: c++ c++11 decltype static-assert

为什么这个(static_assert)在一个类的定义中不起作用?

template<class IntT, IntT low = IntT(), IntT high = IntT()>
struct X 
{
    static_assert(std::is_same<decltype(low),decltype(high)>::value,"Different types not allowed");
};



int _tmain(int argc, _TCHAR* argv[])
{
    int low, high;

    X<char,1,'a'> x;//HERE I SHOULD GET ERROR
    cout << sizeof(x);

    return 0;
}

1 个答案:

答案 0 :(得分:4)

static_assert工作正常,你的代码永远不会断言。
模板struct X定义lowhigh,类型为IntT。它们都是相同类型,无论它们具有什么价值。
当您实例化结构(X<char,1,'a'> x)时,您告诉编译器IntT的类型是char并且正在向low提供值1并且high'a'(即97)。但是,lowhigh的类型始终为char,因此static_assert永远不会断言。