Code: Select all
template < class T, class Y, class ...Args >
struct isSame
{
static constexpr bool value = std::conditional<
sizeof...( Args ),
typename std::conditional<
std::is_same< T, Y >::value,
isSame< Y, Args... >, // Error!
std::false_type >::type,
std::is_same< T, Y > >::type::value;
};
int main()
{
qDebug() ::value;
return EXIT_SUCCESS;
}
Code: Select all
error: wrong number of template arguments (1, should be 2 or more)
Aber meine Frage ist: Warum wird dieser Zweig überhaupt ausgewertet? sizeof...( Args ) ist falsch, daher sollte der innere std:conditional nicht ausgewertet werden. Dies ist kein Laufzeitcode, der Compiler weiß, dass sizeof..( Args) mit den gegebenen Vorlagentypen nie wahr sein wird.
Wenn Sie neugierig sind, es soll eine variable Version von std::is_same sein, nicht, dass es funktioniert...
Mobile version