GCC, Clang, ICC и MSVC все отклоняют этот код, но я не нашел нарушения правил в последнем рабочем проекте стандарта C++.Может ли нестатический член шаблона специализироваться на данных или функциях?
Является ли правило уже стандартным, или это в отчете о дефектах?
#include <type_traits>
template< typename t >
struct s {
std::conditional_t< std::is_integral<t>::value, t, void() > mem;
};
s<int> a;
s< void * > b;
Что вы ожидаете от 'void()' должно оцениваться? – StenSoft
@StenSoft 'void()' - это только тип 'mem'. Вы не можете оценить 's :: mem', потому что это имя нереализованной функции. Но это выходит за рамки вопроса. –
Potatoswatter
Тип функции void(), обычно используемый для вычитания типа шаблона, не определяет или не объявляет var. –