Согласно [temp.deduct.guide/3 ]:
(...) Руководство по дедукции должно быть объявлено в той же области, что и соответствующий шаблон класса, и для шаблона класса-члена с тем же доступом. (...)
Но приведенный ниже пример, похоже, не компилируется как в [gcc], так и в [clang].
#include <string>
template <class>
struct Foo {
template <class T>
struct Bar {
Bar(T) { }
};
Bar(char const*) -> Bar<std::string>;
};
int main() {
Foo<int>::Bar bar("abc");
static_cast<void>(bar);
}
Каков правильный синтаксис руководства по выводу для вложенного класса шаблона? Или, может быть, это правильный, но он еще не поддерживается компиляторами?
Подобный синтаксис, но без вложенного класса, отлично компилируется как в gcc, так и в clang:
#include <string>
template <class T>
struct Bar {
Bar(T) { }
};
Bar(char const*) -> Bar<std::string>;
int main() {
Bar bar("abc");
static_cast<void>(bar);
}