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 не скомпилируется, хотя шаблонная функция нигде не вызывается