// Verify that top-level cv-qualifiers on parameter types are considered // when determining the function type of an instantiated function template. // This resolves a part of Core issues 1001/1322. // { dg-do compile } // { dg-additional-options "-Wno-volatile" } template void foo0(T t = 0); template void foo1(const T = 0); template void foo2(volatile T t = 0); template void foo3(const volatile T t = 0); #if __cplusplus >= 201103L #define SA(X) static_assert(X,#X) SA(__is_same(decltype(foo0), void(char*))); SA(__is_same(decltype(foo0), void(const char*))); SA(__is_same(decltype(foo0), void(volatile char*))); SA(__is_same(decltype(foo0), void(const volatile char*))); SA(__is_same(decltype(foo1), void(const char*))); SA(__is_same(decltype(foo1), void(const char*))); SA(__is_same(decltype(foo1), void(const volatile char*))); SA(__is_same(decltype(foo1), void(const volatile char*))); SA(__is_same(decltype(foo2), void(volatile char*))); SA(__is_same(decltype(foo2), void(const volatile char*))); SA(__is_same(decltype(foo2), void(volatile char*))); SA(__is_same(decltype(foo2), void(const volatile char*))); SA(__is_same(decltype(foo3), void(const volatile char*))); SA(__is_same(decltype(foo3), void(const volatile char*))); SA(__is_same(decltype(foo3), void(const volatile char*))); SA(__is_same(decltype(foo3), void(const volatile char*))); #endif int main() { foo0(); foo0(); foo0(); foo0(); foo1(); foo1(); foo1(); foo1(); foo2(); foo2(); foo2(); foo2(); foo3(); foo3(); foo3(); foo3(); }