this Рассмотрим код:Ошибка в gcc с параметрами const и шаблона?
#include <type_traits>
template <int> struct II { };
template < const int& > struct RR { };
template < template <auto> typename Class, typename Type > struct Check : std::false_type { };
template < template <auto> typename Class, auto NonTypes > struct Check<Class,Class<NonTypes>> : std::true_type { };
constexpr int TEN = 10;
constexpr const int& REF = TEN;
static_assert(Check<II,II<TEN>>::value); // passes
static_assert(Check<RR,RR<REF>>::value); // FAILS!?
Я использую GCC-7.0.1 и here является живым примером. Вопрос в том, является ли это ошибкой компилятора, или я делаю что-то неправильно?
Только мое предположение: простой 'auto' (из' NonTypes') не может вывести ссылочный тип, который бы соответствовал 'const int &' того, что выводилось в 'Class' (по крайней мере, оно работает с' const auto & NonTypes') –
@PiotrSkotnicki Не было бы тогда смысл, что он будет работать с 'decltype (auto)'? – user975989
@ user975989 Я думаю, что соответствие шаблона специализации сводится к выведению типов созданного шаблона функции, где 'decltype (auto)' бесполезно –