PR35107

сно с [temp.deduct.guide/3]:

(...) Руководство по дедукции должно быть объявлено в той же области видимости, что и соответствующий шаблон класса, и, для шаблона класса члена, с таким же доступом. (...)

Но приведенный ниже пример не компилируется в обоих[GCC] а также[Лязг].

#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);
}

Ответы на вопрос(1)

Ваш ответ на вопрос