(Этот вопрос не касается аргументов шаблона шаблона.)
Я только что обнаружил, что GCC компилирует такой код
template <typename A, typename B>
struct P {};
template <typename A>
template <typename B>
using Q = P<A, B>;
где Q
- двукратно оформленное имя.
Но я не могу использовать это. Когда я пишу Q<short><long>
, я получаю
template_template.cpp:10:5: error: ‘Q<short int>’ is not a template
Q<short><long>{};
^~~~~~~~
template_template.cpp:10:20: error: invalid use of incomplete type ‘Q<short int>’
Q<short><long>{};
^
template_template.cpp:2:8: note: declaration of ‘Q<short int>’
struct P {};
Почему скомпилирован первый фрагмент?
Есть ли синтаксис, чтобы убедить компилятор, что Q<short>
является фактически шаблоном?
//GCC 6.3.0