Рассмотрим этот пример (также доступный в wandbox):
template <template <auto> class>
void test() { }
template <int>
struct X { };
Попытка создания экземпляра test<X>()
на clang++
4.0 (trunk) приводит к ошибке компиляции:
error: no matching function for call to 'test'
test<X>();
^~~~~~~
note: candidate template ignored:
invalid explicitly-specified argument for 1st template parameter
void test() { }
Мое первоначальное предположение/интуиция заключалось в том, что test
можно использовать для соответствия любому template
, имеющему непиковый параметр.
Однако, следующий фрагмент кода успешно компилируется:
template <template <auto> class>
void test() { }
// vvvv
template <auto>
struct X { };
Это предназначено? Не удалось найти ничего убедительного в P0127R2.