// 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 { target c++11 } } // { dg-additional-options "-Wno-volatile" } template void foo0(Ts... t); template void foo1(const Ts... t); template void foo2(volatile Ts... t); template void foo3(const volatile Ts... t); #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(0); foo0(0); foo0(0); foo0(0); foo1(0); foo1(0); foo1(0); foo1(0); foo2(0); foo2(0); foo2(0); foo2(0); foo3(0); foo3(0); foo3(0); foo3(0); }