Рассмотрим следующий фрагмент:
struct S {
S() {}
template<typename B>
struct T {
T(B &&) {}
};
template<typename B>
T(B &&) -> T<B>;
};
int main() {
S::T t{0};
}
Clang принимает его , а GCC отклоняет код со следующей ошибкой:
prog.cc: 10: 5: ошибка: руководство по выводу 'S :: T (B &&) -> S :: T' должно быть объявлено в области имен
Это допустимый код?Какой компилятор прав: GCC или Clang?