Я пытаюсь понять, почему я получаю другое поведение с двумя шаблонами, которые должны быть эквивалентны мне
Учитывая
template<template<typename...> class TT, typename T1, typename T2>
class A {};
is_a
является универсальной версией
template<typename T>
struct is_a : std::false_type
{
};
template<template<typename...> class TT, typename... T>
struct is_a<A<TT, T...>> : std::true_type
{
};
is_a2
- это версия, которая была вручную расширена до 2 типов вместо пакета параметров
template<typename T>
struct is_a2 : std::false_type
{
};
template<template<typename...> class TT, typename T1, typename T2>
struct is_a2<A<TT, T1, T2>> : std::true_type
{
};
Я бы ожидал, что 2 версии будут вести себя одинаково, когда A создается с 3 параметрами, но это не так
См. Код компиляции https://wandbox.org/permlink/MjSwFLvWmH0n1QLk
Я бы ожидал, что is_a
будет работать где угодно is_a2
работает.
Это ошибка компилятора, о которой я должен сообщить?
EDIT
Видимо, это работает в Clang https://wandbox.org/permlink/9n5pXUGtBa8cAvFw