-8

为什么类定义中的 this (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;
}
4

1 回答 1

5

static_assert工作正常,是你的代码永远不会断言。
模板struct X定义lowhighas 的类型IntT。它们都是同一类型,无论它们具有什么值。
当您实例化 struct ( X<char,1,'a'> x) 时,您是在告诉编译器类型IntTchar并且正在赋予low1high'a'(即 97)。然而,lowand的类型high总是char如此,static_assert永远不会断言。

于 2011-02-22T13:33:33.173 回答