https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97375
Bug ID: 97375 Summary: Unexpected top-level const retainment when declaring non-type template paramter with decltype(auto) Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: anders.granlund.0 at gmail dot com Target Milestone: --- Consider the following program: #include <iostream> #include <type_traits> template<const int N> void f1() { std::cout << std::is_const_v<decltype(N)> << std::endl; } template<decltype(auto) N> void f2() { std::cout << std::is_const_v<decltype(N)> << std::endl; } int main() { const int i = 0; f1<i>(); f2<i>(); } When compiling it with -std=c++17 -pedantic-errors it gives the following output: 0 1 I expect it to give the following output instead: 0 0 So that the ignoral of top-level const is done in both cases. Note that clang gives the correct output. Compiler explorer link showing the difference between clang and gcc behaviour: https://godbolt.org/z/aefYKd I tried to report this bug first to clang (with a different example program), but it turned out from the discussion (comment #3) that the bug was actually in gcc: https://bugs.llvm.org/show_bug.cgi?id=47792#c3