есть 2 фрагмента кода:
template <typename T>
struct order {};
template <typename T>
struct order<std::vector<T>> = order<std::deque<T>> {};
и
template <typename T>
struct order {};
template <typename T>
struct order<std::vector<T>> final = order<std::deque<T>> {};
В первом случае не компилируется, во втором компилируется. Что это за синтаксис? P.S, в специализации структуры для std::vector методы, определённые в специализации для std::deque недоступны.
Я не видел это нигде, в том числе и в стандарте (вроде)
Кажется, что здесь определяется шаблон неконстантной переменной с именем final и типом struct order<std::vector<T>> с начальным значением order<std::deque<T>>{}. GCC/Clang/ICC действительно компилируют это, MSVC взрывается
Обсуждают сегодня