(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
warn/
Wignored-qualifiers3.C
// PR c++/107492
// { dg-do compile { target c++14 } }
// { dg-additional-options "-Wignored-qualifiers" }

// Here the 'const' matters, so don't warn.
template<typename T> struct S { };
template<> struct S<void(*)()> { };
template<> struct S<const void(*)()> { }; // { dg-bogus "ignored" }

template<typename T, typename U> constexpr bool is_same_v = false;
template<typename T> constexpr bool is_same_v<T, T> = true;

static_assert( ! is_same_v< void(*)(), const void(*)() >, ""); // { dg-bogus "ignored" }

// Here the 'const' matters as well -> don't warn.
auto g() -> const void (*)(); // { dg-bogus "ignored" }
auto g() -> const void (*)() { return nullptr; } // { dg-bogus "ignored" }

// Here as well.
const void (*h)() = static_cast<const void (*)()>(h); // { dg-bogus "ignored" }

// But let's keep the warning here.
const void f(); // { dg-warning "ignored" }
const void f() { } // { dg-warning "ignored" }