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

--- Comment #1 from Miro Palmu <email at miropalmu dot cc> ---
Corollary, if `sequence` is replaced with std::index_sequence this can lead to
bogus errors about ambiguous function calls if triggered inside a explicit
instantiation (https://godbolt.org/z/8Wr1YjE3z):

```
#include <utility>

template <typename T>
struct holder {
    T t;
};

template <auto n>
using should_be_int = decltype(
    []<std::size_t... I>(std::index_sequence<I...>) {
        return 42;
    }(std::make_index_sequence<n>()));


template <auto m>
struct Foo{
    template <should_be_int<m>...>
    auto foo(){ return 0; }

    template <holder<should_be_int<m>>>
    auto foo(){ return 1; }
};


// This leads to ambiguous call.
template <typename>
struct Bar{
    void bar(){
        Foo<0>{}.foo<0>();
    }
};

template struct Bar<int>;

// This leads to ICE
// int main() {
//     Foo<0>{}.foo<0>();
// }
```

Reply via email to