blob: acdf5a6505fa56a7fb71b4380e0e5ffb594efeca [file] [log] [blame]
// { dg-do compile { target c++20 } }
namespace std {
struct source_location {
struct __impl {
const char *_M_file_name;
const char *_M_function_name;
unsigned int _M_line, _M_column;
};
const __impl *__ptr;
constexpr source_location () : __ptr (nullptr) {}
static consteval source_location
current (const void *__p = __builtin_source_location ()) {
source_location __ret;
__ret.__ptr = static_cast <const __impl *> (__p);
return __ret;
}
constexpr const char *file_name () const {
return __ptr ? __ptr->_M_file_name : "";
}
constexpr const char *function_name () const {
return __ptr ? __ptr->_M_function_name : "";
}
constexpr unsigned line () const {
return __ptr ? __ptr->_M_line : 0;
}
constexpr unsigned column () const {
return __ptr ? __ptr->_M_column : 0;
}
};
}
using namespace std;
auto a = source_location::current; // { dg-error "taking address of an immediate function" }
constexpr auto b = &source_location::current; // { dg-error "taking address of an immediate function" }
void
foo ()
{
auto c = &source_location::current; // { dg-error "taking address of an immediate function" }
constexpr auto d = source_location::current; // { dg-error "taking address of an immediate function" }
static auto e = source_location::current; // { dg-error "taking address of an immediate function" }
}