我试图理解为什么为什么我使用2个应该与我等效的模板来获得不同的行为
给予
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
{
};
当用3个参数实例化A时,我希望这2个版本具有相同的行为,但事实并非如此
请参见编译https://wandbox.org/permlink/MjSwFLvWmH0n1QLk
的代码我希望is_a
在is_a2
工作的任何地方工作。
这是我应该报告的编译器错误吗?
编辑
显然,这适用于clang https://wandbox.org/permlink/9n5pXUGtBa8cAvFw