blob: 726c9df5c88eeff2db8e671eff65ba069853942d [file] [log] [blame]
// P0634R3
// { dg-do compile { target c++20 } }
// OK, return type of a function declaration at global scope.
template<class T> T::R f();
// Ill-formed (no diagnostic required), attempt to declare
// a void variable template
template<class T> void f(T::R); // { dg-error "declared void" }
template <class T> struct A;
template <class T> using B = A<T>::U;
template<typename T>
struct PtrTraits { typedef int Ptr; };
template<class T> struct S {
// OK, in a defining-type-id.
using Ptr = PtrTraits<T>::Ptr;
// OK, trailing-return-type.
auto g() -> S<T*>::Ptr;
// OK, class scope
T::R
f (T::P p)
{
// OK, type-id of a static_cast
return static_cast<T::R>(p);
}
};
template<typename T>
void f ()
{
// Variable pf of type void* initialized with T::X
void (*pf)(T::X);
// Error: T::X at block scope does not denote a type
// (attempt to declare a void variable)
void g(T::X); // { dg-error "declared void" }
}