Std::bedingte Verzweigungsauswertung zur KompilierungszeitC++

Programme in C++. Entwicklerforum
Anonymous
 Std::bedingte Verzweigungsauswertung zur Kompilierungszeit

Post by Anonymous »

Das zusammenstellen:

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;
}
Gibt mir diesen Compilerfehler:

Code: Select all

error: wrong number of template arguments (1, should be 2 or more)
Das Problem ist, dass isSame< double, int > ein leeres Args-Parameterpaket hat, sodass isSame< Y, Args... > effektiv zu isSame< Y > wird, was nicht mit der Signatur übereinstimmt.

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...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post