Рассмотрим простой пример:
int x;
template <template <auto> class TT>
struct Foo {
void foo() {
TT<(x)> tt;
static_cast<void>(tt);
}
};
template <decltype(auto)>
struct Bar { };
int main() {
Foo<Bar> foobar;
foobar.foo();
}
[clang], похоже, имеет дело с тем, что decltype(auto)
placeholder, несмотря на использование auto
в объявлении параметра шаблона шаблона без проблема.
[gcc] с другой стороны - не очень хорошо:
prog.cc:6:13: ошибка: значение 'x' не используется в постоянном выражении
Как обычно - какое поведение ожидается в соответствии со стандартом? Или возможно все возможно, и код плохо сформирован (на этот раз я полагаю, что не могу, но не могу это исключить окончательно)?
PS. Извините за нарушение одного из компиляторов снова;)