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 здесь и попробуйте. Я нахожусь здесь с clang, но что говорит об этом стандарт С++?
Следующий вопрос - можно ли это сделать, чтобы работать в clang?