decltype в static_assert - PullRequest
       36

decltype в static_assert

0 голосов
/ 21 февраля 2011

Почему это (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 Ответ

4 голосов
/ 22 февраля 2011

static_assert работает нормально, это ваш код, который никогда не утверждать.
Шаблон struct X определяет low и high для типа IntT.Оба они одного типа, какие бы значения они ни имели.
Когда вы создаете экземпляр структуры (X<char,1,'a'> x), вы сообщаете компилятору, что тип IntT равен char и присваивает low значение 1 и high значение 'a' (т.е. 97).Однако тип low и high всегда равен char, поэтому static_assert никогда не будет подтвержден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...