Подтвердить что ты не робот

Может ли нестатический член шаблона специализироваться на данных или функциях?

GCC, Clang, ICC и MSVC все отклоняют этот код, но я не нашел нарушения в последнем рабочем проекте стандарта С++.

Является ли правило уже стандартным, или оно находится в отчете о дефекте?

#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;
4b9b3361

Ответ 1

Код недействителен из-за 14.3.1/3:

Если объявление получает тип функции через тип, зависящий от параметра шаблона, и это вызывает объявление, которое не использует синтаксическую форму декларатора функции, чтобы иметь тип функции, программа плохо сформирован.

Тип объявления здесь зависит от параметра шаблона t и поэтому не может быть типом функции.