forked from boostorg/assert
Update BOOST_CURRENT_LOCATION to be constexpr
This commit is contained in:
@ -123,6 +123,16 @@ template<class E, class T> std::basic_ostream<E, T> & operator<<( std::basic_ost
|
|||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR inline char const* srcloc_strip_top_level( char const* fn )
|
||||||
|
{
|
||||||
|
return std::strcmp( fn, "top level" ) == 0? "": fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
||||||
#if defined(BOOST_DISABLE_CURRENT_LOCATION)
|
#if defined(BOOST_DISABLE_CURRENT_LOCATION)
|
||||||
@ -131,6 +141,8 @@ template<class E, class T> std::basic_ostream<E, T> & operator<<( std::basic_ost
|
|||||||
|
|
||||||
#elif defined(BOOST_MSVC) && BOOST_MSVC >= 1926
|
#elif defined(BOOST_MSVC) && BOOST_MSVC >= 1926
|
||||||
|
|
||||||
|
// std::source_location::current() is available in -std:c++20, but fails with consteval errors before 19.31, and doesn't produce
|
||||||
|
// the correct result under 19.31, so prefer the built-ins
|
||||||
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
|
||||||
|
|
||||||
#elif defined(__cpp_lib_source_location) && __cpp_lib_source_location >= 201907L
|
#elif defined(__cpp_lib_source_location) && __cpp_lib_source_location >= 201907L
|
||||||
@ -141,10 +153,16 @@ template<class E, class T> std::basic_ostream<E, T> & operator<<( std::basic_ost
|
|||||||
|
|
||||||
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
|
||||||
|
|
||||||
#elif defined(BOOST_GCC) && BOOST_GCC >= 40800
|
#elif defined(BOOST_GCC) && BOOST_GCC >= 70000
|
||||||
|
|
||||||
|
// The built-ins are available in 4.8+, but are not constant expressions until 7
|
||||||
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())
|
||||||
|
|
||||||
|
#elif defined(BOOST_GCC)
|
||||||
|
|
||||||
|
// __PRETTY_FUNCTION__ is allowed outside functions under GCC
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__FILE__, __LINE__, ::boost::detail::srcloc_strip_top_level(__PRETTY_FUNCTION__))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// __func__ macros aren't allowed outside functions, but BOOST_CURRENT_LOCATION is
|
// __func__ macros aren't allowed outside functions, but BOOST_CURRENT_LOCATION is
|
||||||
|
Reference in New Issue
Block a user