GCC, Clang, ICC e MSVC rifiutano tutti questo codice, ma non trovo alcuna regola violata nell'ultima bozza di lavoro dello standard C++.Un membro non statico di un modello è specializzato in dati o funzioni?
La regola è già presente nello standard o si trova in un rapporto sui difetti?
#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;
Cosa ti aspetti che 'void()' valuti? – StenSoft
@StenSoft 'void()' è solo il tipo di 'mem'. Non è possibile valutare 's :: mem', perché è il nome di una funzione non implementata. Ma questo è al di fuori della portata della domanda. –
Potatoswatter
void() tipo di funzione, in genere utilizzato per la deduzione del tipo di modello, non definire o dichiarare una var. –