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

            Bug ID: 105623
           Summary: [12/13 regression][rejects valid] invalid use of auto
                    when deducing return type of base class template
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hello at josephloser dot com
  Target Milestone: ---

The following code used to work in GCC 11.3.0, but fails on GCC 12.1.0 and
trunk.

```
#include <string_view>

constexpr auto g(auto name_fn)  {
    return name_fn();
}

template <char... Cs> struct ct_string {
    static constexpr char str[] = {Cs..., 0};
    static constexpr auto name() { return std::string_view{str, sizeof...(Cs)};
}
};

struct S : ct_string<'f', 'o', 'o'> {
    constexpr auto f() {
        return g(name);
    }
};

int main() {
    {
        S s;
        [[maybe_unused]] constexpr auto name = s.f();
    }

    return 0;
}
```


This code works on GCC 11.3.0 but fails on GCC 12.1.0 onward, including trunk.
See it live at https://godbolt.org/z/9c8vb1eP5

One workaround is to explicitly provide the return type for `ct_string::foo`
static function such as at https://godbolt.org/z/ccqPxoM5P which works on GCC
11.3.0, 12.1.0, and trunk.

Reply via email to