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

Reply via email to