https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119736
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |burnus at gcc dot gnu.org
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(The following are the links from comment 0; comment 0 also shows the actual
C++ code under the link.)
Example 1: https://godbolt.org/z/aE7xEnzzq
Example 2: https://godbolt.org/z/EEjMj9ab4
→ ICE with GCC 15 -std=c++17
→ Error with GCC 14 -std=c++17 / -std=C++14 | GCC 15 -std=c++14
→ ICE is a '15 Regression' - as mentioned in comment 0
* * *
First example:
* Clang (trunk-std=c++14, -std=c++17, -std=c++26) rejects the first one with:
error: reference to temporary object is not allowed in a template argument
* GCC 14 (-std=c++14 / -std=c++17) rejects it with:
error: the address of 'make_static_ref<42>::<temporary>' is not a valid
template argument
* GCC 15 (when not ICEing, i.e. with -std=14) rejects it with:
error: 'constexpr const int& make_static_ref<42>::ref' is not a valid
template argument for type 'const int&' because a reference variable does not
have a constant address
* * *
Second example:
* Clang (trunk; -std=c++14, -std=c++17, -std=c++26) rejects the second one
with:
error: explicit instantiation of 'takes_static_ref_f' does not refer to a
function template, variable template, member function, member class, or static
data member
* GCC 14 (-std=c++14 / -std=c++17) and
GCC 15 -std=c++14 rejects it with:
error: template-id 'takes_static_ref_f<make_static_ref<42>::ref>' for 'void
takes_static_ref_f()' does not match any template declaration