Według [temp.deduct.guide/3]:Jak zapewnić przewodnik dedukcji dla zagnieżdżonej klasy szablonów?
(...) Odliczenie-przewodnik powinien być zadeklarowany w tym samym zakresie jak odpowiedniego szablonu klasy, a do szablonu klasy członka, z taki sam dostęp. (...)
Ale poniżej przykład nie wydaje się kompilować zarówno w [gcc] i [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);
}
Jaka jest prawidłowa składnia przewodnika odliczeń dla zagnieżdżonej klasy szablonów? A może ten jest poprawny, ale nie jest jeszcze obsługiwany przez kompilatory?
Podobny składnia ale bez zagnieżdżonych klasy kompiluje dobrze zarówno w gcc i brzękiem:
#include <string>
template <class T>
struct Bar {
Bar(T) { }
};
Bar(char const*) -> Bar<std::string>;
int main() {
Bar bar("abc");
static_cast<void>(bar);
}
W GCC jest to błąd polegający na tym, że deklarujesz funkcję. –
@Someprogrammerdude Nie jestem pewien, czy jest to poprawna składnia - nie ma odpowiedniego przykładu w standardzie, ale wspomina o sytuacji ... –
Zagnieżdżony przewodnik dedukcji szablonów działa, jeśli klasa nadrzędna nie jest szablonowana .... – AndyG