GCC, Clang, ICC und MSVC lehnen alle diesen Code ab, aber ich finde keine verletzte Regel im letzten Arbeitsentwurf des C++ - Standards.Kann sich ein nicht statisches Mitglied einer Vorlage auf Daten oder Funktionen spezialisieren?
Liegt die Regel bereits im Standard oder ist es in einem Fehlerbericht?
#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;
Was erwarten Sie von 'void()'? – StenSoft
@StenSoft 'void()' ist nur der Typ von 'mem'. Sie können ' :: mem' nicht auswerten, weil es der Name einer nicht implementierten Funktion ist. Aber das ist außerhalb des Bereichs der Frage. –
Potatoswatter
void() - Funktionstyp, der normalerweise für den Vorlagentyp-Abzug verwendet wird, nicht definieren oder deklarieren var(). –