[Bug c++/126755] New: GCC rejects valid program involving overloaded conversion operators

jlame646 at gmail dot com via Gcc-bugs <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126755

            Bug ID: 126755
           Summary: GCC rejects valid program involving overloaded
                    conversion operators
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jlame646 at gmail dot com
  Target Milestone: ---

The following valid program(afaik) is rejected by gcc,edg and msvc but accepted
by clang. https://godbolt.org/z/a7b9qzaTs

```
struct S {
    template<typename T>
    constexpr operator T()const    
    {
        return 10;
    }
    constexpr operator int()
    {
        return 4;
    }   
};
int main()
{
    constexpr S s;
    constexpr int i =  s.operator int(); //clang ok, gcc:no msvc:no
    int arr[i];
}
```
GCC says:
```
<source>: In function 'int main()':
<source>:22:38: error: passing 'const S' as 'this' argument discards qualifiers
[-fpermissive]
   22 |     constexpr int i =  s.operator int(); //clang ok, gcc:no msvc:no
      |                        ~~~~~~~~~~~~~~^~
<source>:10:15: note:   in call to 'constexpr S::operator int()'
   10 |     constexpr operator int()
      | 
```
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.