https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116005

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
If I change the definition of B to:
template <typename T>
using B = A<const T, void>;

Then it works in GCC and MSVC but still fails on clang (but that might be a
clang issue).

Note EDG also rejects it.

```
"<source>", line 20: error: no instance of constructor "A" matches the argument
list
            argument types are: (const f<int>)
      B b{v};
        ^

"<source>", line 20: error: cannot deduce class template arguments
      B b{v};
      ^
```

Note for the EDG case I had to use an user defined template class instead of
std::vector. e.g.:
```
template <class T>
struct f
{};

template <typename T1, typename T2>
struct A {
    template <typename U>
    A(const f<U> &arr) {}
};

template <typename T1, typename T2>
A(f<T1> const &) -> A<const T1, T2>;

template <typename T>
using B = A<T, void>;

int main() {
    const f<int> v;

    B b{v};
}
```

EDG also accepts it if we change the A definition to the one mentioned at the
top of this comment.

Reply via email to