Есть идеи, как превратить это в предупреждение?

Я использую эту функцию is_enum, чтобы проверить, является ли переменная перечислением или нет. {{1} } (См. Ошибку ниже)

#include <boost/type_traits/is_enum.hpp>
#include <boost/static_assert.hpp>

template<typename T>
void is_enum(T)
{
    BOOST_STATIC_ASSERT(boost::is_enum<T>::value == true);
}

int main()
{
    char c = 'a';
    is_enum(c);
    return 0;
}

Это дает мне следующую ошибку:

-*- mode: compilation; default-directory: "/home/epronk/enums/" -*-
Compilation started at Thu Nov 10 21:20:05

g++ -I /home/epronk/src/boost_1_47_0/ q.cpp
q.cpp: In function ‘void is_enum(T) [with T = char]’:
q.cpp:13:   instantiated from here
q.cpp:7: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 
q.cpp:7: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 

Compilation exited abnormally with code 1 at Thu Nov 10 21:20:05

(не знаю, почему g ++ (Debian 4.4.5-8) 4.4.5 выдает ту же ошибку дважды)

Можно ли изменить эта функция становится предупреждением?

Для char вы можете попытаться присвоить ему 256, что приведет к ошибке переполнения.

отредактировано

Некоторый контекст: я хочу найти такие операторы переключения.

#define switch(arg) \
is_enums(arg); \
switch(arg)

int main()
{
    char c = Red;

    switch(c)
    {
    case Banana: // No warning
        break;
    case Red:
        break;
    case Green:
        break;
    case Blue:
        break;
    }
    return 0;
}
5
задан Eddy Pronk 9 November 2011 в 11:54
поделиться