| Issue |
53114
|
| Summary |
template<typename T> must be the same as template<typename T, typename... Rest> if Rest... is empty
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
Fedr
|
This valid code:
```
template<typename Derived>
struct Base;
template<template<typename, typename...> class DerivedType, typename T, typename... Rest >
struct Base<DerivedType<T, Rest...>> {
Base() = default;
template<typename T2, typename... Rest2>
Base(const Base<DerivedType<T2, Rest2...>>&) {}
};
template<typename T>
struct Child : Base<Child<T>> {
using MyBase = Base<Child<T>>;
Child() = default;
template<typename T2>
Child(const Child<T2>& other) : MyBase(other) {}
};
int main() {
Child<int> cti;
[[maybe_unused]] Child<float> ctf = cti;
}
```
is accepted by GCC, while Clang prints the error:
```
error: too many template arguments for class template 'Child'
Base(const Base<DerivedType<T2, Rest2...>>&) {}
```
Demo: https://gcc.godbolt.org/z/K55rWcM8e
Related discussion: https://stackoverflow.com/q/59306119/7325599
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs