https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102980
Bug ID: 102980 Summary: Fail to get an r-value from std::array::size in a template function Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: davide.gadioli at polimi dot it Target Milestone: --- System configuration: Ubuntu 20.04 gcc 11.2.0 built from sources, configured with the following line ../configure --prefix=/opt/modules/install/gcc/11.2.0 --enable-gold=yes --enable-lto --disable-multilib --enable-languages=c,c++,fortran I compiled the snippet of code with the following flags: -Wall -Wextra -fno-strict-aliasing -fwrapv Problem: while compiling the following snippet of code: #include<array> template<class T> auto parse() { const std::array<int, 3> array{0, 1 , 2}; return std::size_t{array.size()}; } gcc fails to compile and it generates the following compiler error: ``` test.cpp: In function ‘auto parse()’: test.cpp:6:34: error: no matching function for call to ‘std::array<int, 3>::size(const std::array<int, 3>*)’ 6 | return std::size_t{array.size()}; | ~~~~~~~~~~^~ In file included from test.cpp:1: /opt/modules/install/gcc/11.2.0/include/c++/11.2.0/array:176:7: note: candidate: ‘constexpr std::array<_Tp, _Nm>::size_type std::array<_Tp, _Nm>::size() const [with _Tp = int; long unsigned int _Nm = 3; std::array<_Tp, _Nm>::size_type = long unsigned int]’ 176 | size() const noexcept { return _Nm; } | ^~~~ /opt/modules/install/gcc/11.2.0/include/c++/11.2.0/array:176:7: note: candidate expects 0 arguments, 1 provided ``` It seems that it cannot recognize "this" when calling the function. However, I can't pinpoint the exact cause of the problem. Maybe is related to Bug 101680 . By using Compiler Explorer (https://godbolt.org/z/ehv37scv4) it seems that the same behavior happens for gcc 10, but not for gcc 9. The snippet of code has been revised from my initial post on stack overflow (https://stackoverflow.com/q/69742093/2481512) using user feedback