static_assert, даже если член не создан

При помещении с жестко запрограммированным значением оно срабатывает, даже если функция, в которой он находится, не создается. Это правильное поведение или я неправильно понимаю, как работает static assert?

#include <type_traits>
template <class T>
struct Helper
{
    static void do_something()
    {
        // Always fails, even when not instantiated.
        static_assert(false,
            "You must specialize this class to serialize Enums.");

        // Work around:
        static_assert(!std::is_same<T, T>::value,
            "You must specialize this class to serialize Enums.");
    }
};

Использование: g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

2 ответа

SFINAE работает с аргументами функции и типом возврата, а не с параметрами шаблона.

Это потому, что "ложь" не зависит от шаблона в любом случае, для компилятора этот код обязательно должен утверждать. Есть похожая тема

static_assert не скомпилируется, хотя шаблонная функция нигде не вызывается

Другие вопросы по тегам