【发布时间】:2018-07-04 22:40:21
【问题描述】:
Gcc 和 clang 似乎对这段代码是否应该编译存在分歧:
#include <type_traits>
template <typename Signature, int N = 0>
struct MyDelegate { };
template <typename D>
struct signature_traits;
template <template <typename> class Delegate, typename Signature>
struct signature_traits<Delegate<Signature>>
{
using type = Signature;
};
static_assert(std::is_same_v<
void(int, int),
signature_traits<MyDelegate<void(int, int)>>::type
>);
见godbolt output here and try it。我在这里支持 clang,但是 C++ 标准对此有何看法?
一个后续问题 - 这可以在 clang 中使用吗?
【问题讨论】:
标签: c++ templates language-lawyer template-meta-programming c++17