Question: How to provide deduction guide for nested template class

Question

How to provide deduction guide for nested template class

Answers 1
Added at 2017-09-07 20:09
Tags
Question

According to [temp.deduct.guide/3]:

(...) A deduction-guide shall be declared in the same scope as the corresponding class template and, for a member class template, with the same access. (...)

But below example doesn't seem to compile in both [gcc] and [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);
}

What is the correct syntax of deduction guide for nested template class? Or maybe this one is correct but it isn't yet supported by the compilers?

Edit:

Similar syntax but without nested class compiles fine both in gcc and 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);
}
Answers to

How to provide deduction guide for nested template class

nr: #1 dodano: 2017-09-07 21:09

[temp.deduct.guide] includes the sentence:

A deduction-guide shall be declared in the same scope as the corresponding class template and, for a member class template, with the same access.

This suggests that your example should work - deduction guides are explicitly supported for member class templates, as long as they're declared in the same scope and access (which would be the class scope and public - check and check).

This is gcc bug 79501 (filed by Richard Smith).

Source Show
◀ Wstecz