Код: Выделить всё
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;
}
Код: Выделить всё
error: wrong number of template arguments (1, should be 2 or more)
Но мой вопрос: почему эта ветвь вообще оценивается? sizeof...( Args ) имеет значение false, поэтому внутренний std:conditional не должен оцениваться. Это не фрагмент кода во время выполнения, компилятор знает, что sizeof..( Args ) никогда не будет истинным с заданными типами шаблонов.
Если вам интересно, это должна быть вариативная версия std::is_same, а не то, чтобы она работала...
Подробнее здесь: https://stackoverflow.com/questions/240 ... evaluation
Мобильная версия