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

            Bug ID: 102734
           Summary: Autodeduced method return type is available before the
                    class is complete
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

I believe, this program must be ill-formed:
```
class A {
    static constexpr auto GetInt() noexcept { return 6; }

    template<int N = GetInt()>
    int func() { return N; }
};
```
because auto-deduced type of GetInt() method is used in the default template
argument, where the class is not yet complete (so method bodies are not yet
inspected).

Both Clang and MSVC reject this program, demo:
https://gcc.godbolt.org/z/3e6o8f5sz

Related discussion with slightly different example:
https://stackoverflow.com/q/56969739/7325599

Reply via email to