jaulib v1.3.0
Jau Support Library (C++, Java, ..)
|
C++ language utilities, language feature alignment, type trails, data alignment and intrinsics. More...
Namespaces | |
namespace | jau::impl |
Classes | |
struct | jau::has_builtin_bit_cast< Dummy_type > |
Convenience type trait for __has_builtin(__builtin_bit_cast) . More... | |
struct | jau::has_member_of_pointer< C, typename > |
Checker for member of pointer '->' operator with convertible pointer return, no arguments. More... | |
struct | jau::has_member_of_pointer< C, typename std::enable_if< std::is_pointer< decltype(std::declval< C >().operator->())>::value >::type > |
struct | jau::is_container_memmove_compliant< class, class > |
template< class T > is_container_memmove_compliant<T>::value compile-time Type Trait, determining whether the given template class claims to be container memmove compliant, see @Ref darray_memmove. More... | |
struct | jau::is_container_memmove_compliant< T, std::void_t< typename T::container_memmove_compliant > > |
template< class T > is_container_memmove_compliant<T>::value compile-time Type Trait, determining whether the given template class claims to be container memmove compliant, see @Ref darray_memmove. More... | |
struct | jau::is_enforcing_secmem< class, class > |
template< class T > is_enforcing_secmem<T>::value compile-time Type Trait, determining whether the given template class enforces secmem, see @Ref darray_secmem. More... | |
struct | jau::is_enforcing_secmem< T, std::void_t< typename T::enforce_secmem > > |
template< class T > is_enforcing_secmem<T>::value compile-time Type Trait, determining whether the given template class enforces secmem, see @Ref darray_secmem. More... | |
struct | jau::is_rtti_available_t< _Dummy > |
Template type trait evaluating std::true_type{} if RTTI is available, otherwise std::false_type{}. More... | |
struct | jau::packed_t< T > |
Support aligned memory transfer from and to potentially unaligned memory. More... | |
struct | jau::type_cue< T > |
Helper, allowing simple access to compile time typename and Type traits information, see jau::type_name_cue to setup typename's string representation. More... | |
class | jau::type_info |
Generic type information using either Runtime type information (RTTI) or Compile time type information (CTTI) More... | |
struct | jau::type_name_cue< T > |
Helper, allowing simple access and provision of a typename string representation at compile time, see jau::type_cue for usage. More... | |
Macros | |
#define | __builtin_bit_cast(Dest_type, Value_arg) 0 |
Dummy definition in the absence of this builtin function as required to have this compilation unit compile clean. More... | |
#define | __packed __attribute__ ((packed)) |
packed: lead out macro, requires packed lead in as well. More... | |
#define | __restrict_cxx__ |
Wrap C++ extension __restrict__ covering C99's restrict feature keyword. More... | |
#define | consteval_cxx20 constexpr |
consteval qualifier replacement for C++20 consteval . More... | |
#define | constexpr_atomic inline |
Used when designed to declare a function constexpr , but prohibited by its specific implementation. More... | |
#define | constexpr_cxx20 inline |
constexpr qualifier replacement for C++20 constexpr . More... | |
#define | constexpr_cxx23 inline |
#define | constexpr_cxx26 inline |
#define | constexpr_non_literal_var inline |
Used when designed to declare a function constexpr , but prohibited by its specific implementation. More... | |
#define | constinit_cxx20 constexpr |
constinit qualifier replacement for C++20 constinit . More... | |
#define | JAU_TYPENAME_CUE(A) template<> struct jau::type_name_cue<A> { static const char * name() { return #A; } }; |
#define | JAU_TYPENAME_CUE_ALL(A) JAU_TYPENAME_CUE(A) JAU_TYPENAME_CUE(A*) JAU_TYPENAME_CUE(const A*) JAU_TYPENAME_CUE(A&) JAU_TYPENAME_CUE(const A&) |
#define | METHOD_CHECKER(checker, name, ret, args) |
Checker for member function with convertible return type and accepting given arguments. More... | |
#define | METHOD_CHECKER_ANY(name, fn, args) |
Checker for member function accepting given arguments. More... | |
#define | METHOD_CHECKER_STRICT_RET(name, fn, ret, args) |
Checker for member function with exact retutn type and accepting given arguments. More... | |
#define | MTYPE_CHECKER(checker, name) |
Checker for member with given name and convertible type. More... | |
#define | MTYPE_CHECKER_ANY(checker, name) |
Checker for member with given name and any type. More... | |
#define | MTYPE_CHECKER_STRICT(checker, name) |
Checker for member with given name and exact type. More... | |
#define | packed__ |
packed__: lead in macro, requires __packed lead out as well. More... | |
#define | PRAGMA_DISABLE_WARNING_CPP |
#define | PRAGMA_DISABLE_WARNING_FORMAT_NONLITERAL |
#define | PRAGMA_DISABLE_WARNING_FORMAT_OVERFLOW |
#define | PRAGMA_DISABLE_WARNING_MULTICHAR |
#define | PRAGMA_DISABLE_WARNING_NULL_DEREFERENCE |
#define | PRAGMA_DISABLE_WARNING_PMF_CONVERSIONS |
#define | PRAGMA_DISABLE_WARNING_POP |
#define | PRAGMA_DISABLE_WARNING_PUSH |
#define | PRAGMA_DISABLE_WARNING_STRINGOP_OVERFLOW |
#define | PRAGMA_DISABLE_WARNING_UNREFERENCED_FORMAL_PARAMETER |
#define | PRAGMA_DISABLE_WARNING_UNREFERENCED_FUNCTION |
Enumerations | |
enum class | jau::TypeTraitGroup : uint8_t { jau::TypeTraitGroup::NONE = 0b00000000 , jau::TypeTraitGroup::PRIMARY_TYPE_CAT = 0b00000001 , jau::TypeTraitGroup::TYPE_PROPERTIES = 0b00000010 , jau::TypeTraitGroup::COMPOSITE_TYPE_CAT = 0b00000100 , jau::TypeTraitGroup::SUPPORTED_OPERATIONS = 0b00001000 , jau::TypeTraitGroup::ALL = 0b11111111 } |
Enumerating the different groups of type traits. More... | |
Functions | |
template<class Dest , class Source > | |
constexpr std::enable_if_t< sizeof(Dest)==sizeof(Source) &&std::is_trivially_copyable_v< Dest > &&std::is_trivially_copyable_v< Source >, Dest > | jau::bit_cast (const Source &src) noexcept |
C++20 bit_cast<>(arg) implementation for C++17. More... | |
template<typename T > | |
constexpr const char * | jau::ctti_name () noexcept |
Returns the type name of given type T using template Compile Time Type Information (CTTI) only with static constant storage duration. More... | |
template<typename R , typename L , typename... A> | |
constexpr const char * | jau::ctti_name () noexcept |
Returns the type name of given function types R(*L)(A...) using template Compile Time Type Information (CTTI) only with static constant storage duration. More... | |
std::string | jau::demangle_name (const char *mangled_name) noexcept |
Returns the demangled given mangled_name if successful, otherwise the mangled_name. More... | |
consteval_cxx20 bool | jau::is_builtin_bit_cast_available () noexcept |
Query whether __builtin_bit_cast(Dest_type, arg) is available, using jau::has_builtin_bit_cast. More... | |
consteval_cxx20 bool | jau::is_builtin_int128_available () noexcept |
consteval_cxx20 bool | jau::is_cxx17 () noexcept |
Returns true if compiled with >= C++17. More... | |
consteval_cxx20 bool | jau::is_cxx20 () noexcept |
Returns true if compiled with >= C++20. More... | |
consteval_cxx20 bool | jau::is_cxx23 () noexcept |
Returns true if compiled with >= C++23. More... | |
consteval_cxx20 bool | jau::is_cxx26 () noexcept |
Returns true if compiled with >= C++26. More... | |
consteval_cxx20 bool | jau::is_debug_enabled () noexcept |
Returns true if compiled with debug information and w/o optimization, i.e. More... | |
consteval_cxx20 bool | jau::is_rtti_available () noexcept |
Returns true if compiled with RTTI available. More... | |
constexpr bool | jau::isTypeTraitBitSet (const TypeTraitGroup mask, const TypeTraitGroup bit) noexcept |
template<typename T > | |
jau::type_info | jau::make_ctti () noexcept |
Constructs a jau::type_info instance based on given type T using template Compile Time Type Information (CTTI) only. More... | |
template<typename R , typename L , typename... A> | |
jau::type_info | jau::make_ctti () noexcept |
Constructs a jau::type_info instance based on given function types R(*L)(A...) using template Compile Time Type Information (CTTI) only via RTTI's `typeid(L) if available or jau::ctti_name<R, L, A...>() otherwise. More... | |
constexpr uint8_t | jau::number (const TypeTraitGroup rhs) noexcept |
constexpr bool | jau::operator!= (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept |
constexpr TypeTraitGroup | jau::operator& (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept |
constexpr bool | jau::operator== (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept |
constexpr TypeTraitGroup | jau::operator^ (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept |
constexpr TypeTraitGroup | jau::operator| (const TypeTraitGroup lhs, const TypeTraitGroup rhs) noexcept |
template<class Dest , class Source > | |
constexpr std::enable_if_t< sizeof(Dest)==sizeof(Source) &&std::is_pointer_v< Source > &&std::is_pointer_v< Dest >, Dest > | jau::pointer_cast (const Source &src) noexcept |
A constexpr pointer cast implementation for C++17, inspired by C++20 bit_cast<>(arg) . More... | |
template<typename T > | |
const char * | jau::type_name () noexcept |
Returns the type name of given type T using template Compile Time Type Information (CTTI) only via RTTI's typeid(T).name() if available or jau::ctti_name<T>() otherwise. More... | |
template<typename R , typename L , typename... A> | |
const char * | jau::type_name () noexcept |
Returns the type name of given function types R(*L)(A...) using template Compile Time Type Information (CTTI) only via RTTI's typeid(L).name() if available or jau::ctti_name<R, L, A...>() otherwise. More... | |
Variables | |
template<typename Dummy_type > | |
constexpr bool | jau::has_builtin_bit_cast_v = has_builtin_bit_cast<Dummy_type>::value |
Value access of has_builtin_bit_cast type trait for convenience . More... | |
template<typename _Tp > | |
constexpr bool | jau::has_member_of_pointer_v = has_member_of_pointer<_Tp>::value |
template<typename _Tp > | |
constexpr bool | jau::has_to_string_v = has_to_string<_Tp>::value |
template<typename _Tp > | |
constexpr bool | jau::has_toString_v = has_toString<_Tp>::value |
template<typename T > | |
constexpr bool | jau::is_container_memmove_compliant_v = is_container_memmove_compliant<T>::value |
template<typename T > | |
constexpr bool | jau::is_enforcing_secmem_v = is_enforcing_secmem<T>::value |
template<typename _Dummy > | |
constexpr bool | jau::is_rtti_available_v = is_rtti_available_t<_Dummy>::value |
Template type trait helper evaluating true if RTTI is available, otherwise false. More... | |
C++ language utilities, language feature alignment, type trails, data alignment and intrinsics.
Used predefined __cplusplus
macro identifier for C++ language specs:
199711L
: pre C++11201103L
: C++11201402L
: C++14201703L
: C++17202002L
: C++20202302L
: C++23??????L
: C++26 ??Used predefined macros denoting the compiler:
__clang__
: LLVM's clang, clang++__GNUC__
: GNU Compiler Collection (GCC)'s gcc, g++_MSC_VER
: Microsoft Compiler__MINGW32__
: MinGW 32__MINGW64__
: MinGW 64__EMSCRIPTEN__
: emscripten for asm.js and WebAssemblyFurther infos:
#define consteval_cxx20 constexpr |
consteval
qualifier replacement for C++20 consteval
.
A
consteval
specifier impliesinline
. At most one of theconstexpr
,consteval
, andconstinit
specifiers is allowed to appear within the same sequence of declaration specifiers. ... An immediate function is aconstexpr
function, and must satisfy the requirements applicable toconstexpr
functions orconstexpr
constructors, as the case may be.
Evaluated using the alternative qualifier constexpr
for C++ < 20, as it is almost contained within consteval
but lacks the immediate function
constraint.
Evaluated as consteval
for C++20.
Definition at line 84 of file cpp_lang_util.hpp.
#define constinit_cxx20 constexpr |
constinit
qualifier replacement for C++20 constinit
.
constinit
cannot be used together withconstexpr
orconsteval
. When the declared variable is a reference,constinit
is equivalent toconstexpr
. When the declared variable is an object,constexpr
mandates that the object must have static initialization and constant destruction and makes the object const-qualified, however,constinit
does not mandate constant destruction and const-qualification.
Evaluated using the alternative qualifier constexpr
for C++ < 20, as it is almost contained within constinit
but lacks the loosening of not mandating constant destruction and const-qualification.
FIXME: Due to the above, this replacement might not be suitable: TBD!
Evaluated as constinit
for C++20.
Definition at line 141 of file cpp_lang_util.hpp.
#define constexpr_cxx20 inline |
constexpr
qualifier replacement for C++20 constexpr
.
A
constexpr
specifier used in a function or static member variable (since C++17) declaration impliesinline
.
Evaluated using the alternative qualifier inline
for C++ < 20, as it is implied for constexpr
functions or static member variables, see above.
Evaluated as constexpr
for C++20, i.e. std::string literals, virtual functions, etc.
Definition at line 160 of file cpp_lang_util.hpp.
#define constexpr_cxx23 inline |
Definition at line 166 of file cpp_lang_util.hpp.
#define constexpr_cxx26 inline |
Definition at line 172 of file cpp_lang_util.hpp.
#define constexpr_non_literal_var inline |
Used when designed to declare a function constexpr
, but prohibited by its specific implementation.
Evaluated using the alternative qualifier inline
for C++ < 20, as it is implied for constexpr
functions or static member variables, see constexpr_cxx20.
Here it but uses non-literal variables, such as std::lock_guard etc. As these can't be evaluated at compile time, the standard does not allow using constexpr
here.
Empty until standard defines otherwise.
Definition at line 193 of file cpp_lang_util.hpp.
#define constexpr_atomic inline |
Used when designed to declare a function constexpr
, but prohibited by its specific implementation.
Evaluated using the alternative qualifier inline
for C++ < 20, as it is implied for constexpr
functions or static member variables, see constexpr_cxx20.
Here it uses thread-safety related measures like atomic storage or mutex locks, which are non-literal variables and hence prohibit the use of constexpr
.
Definition at line 210 of file cpp_lang_util.hpp.
#define __restrict_cxx__ |
Wrap C++ extension __restrict__
covering C99's restrict
feature keyword.
Definition at line 222 of file cpp_lang_util.hpp.
#define __builtin_bit_cast | ( | Dest_type, | |
Value_arg | |||
) | 0 |
Dummy definition in the absence of this builtin function as required to have this compilation unit compile clean.
Dest_type | the target type |
Value_arg | the source value argument |
Definition at line 687 of file cpp_lang_util.hpp.
#define PRAGMA_DISABLE_WARNING_PUSH |
Definition at line 76 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_POP |
Definition at line 77 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_UNREFERENCED_FORMAL_PARAMETER |
Definition at line 78 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_UNREFERENCED_FUNCTION |
Definition at line 79 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_CPP |
Definition at line 80 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_MULTICHAR |
Definition at line 81 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_NULL_DEREFERENCE |
Definition at line 82 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_FORMAT_OVERFLOW |
Definition at line 83 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_FORMAT_NONLITERAL |
Definition at line 84 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_PMF_CONVERSIONS |
Definition at line 85 of file cpp_pragma.hpp.
#define PRAGMA_DISABLE_WARNING_STRINGOP_OVERFLOW |
Definition at line 86 of file cpp_pragma.hpp.
#define packed__ |
packed__: lead in macro, requires __packed lead out as well.
Consider using __pack(...).
Definition at line 39 of file packed_attribute.hpp.
#define __packed __attribute__ ((packed)) |
packed: lead out macro, requires packed lead in as well.
Consider using __pack(...).
Definition at line 48 of file packed_attribute.hpp.
#define JAU_TYPENAME_CUE | ( | A | ) | template<> struct jau::type_name_cue<A> { static const char * name() { return #A; } }; |
Definition at line 228 of file type_traits_queries.hpp.
#define JAU_TYPENAME_CUE_ALL | ( | A | ) | JAU_TYPENAME_CUE(A) JAU_TYPENAME_CUE(A*) JAU_TYPENAME_CUE(const A*) JAU_TYPENAME_CUE(A&) JAU_TYPENAME_CUE(const A&) |
Definition at line 229 of file type_traits_queries.hpp.
#define MTYPE_CHECKER | ( | checker, | |
name | |||
) |
Checker for member with given name and convertible type.
Definition at line 312 of file type_traits_queries.hpp.
#define MTYPE_CHECKER_STRICT | ( | checker, | |
name | |||
) |
Checker for member with given name and exact type.
Definition at line 318 of file type_traits_queries.hpp.
#define MTYPE_CHECKER_ANY | ( | checker, | |
name | |||
) |
Checker for member with given name and any type.
Definition at line 324 of file type_traits_queries.hpp.
#define METHOD_CHECKER | ( | checker, | |
name, | |||
ret, | |||
args | |||
) |
Checker for member function with convertible return type and accepting given arguments.
Definition at line 330 of file type_traits_queries.hpp.
#define METHOD_CHECKER_STRICT_RET | ( | name, | |
fn, | |||
ret, | |||
args | |||
) |
Checker for member function with exact retutn type and accepting given arguments.
Definition at line 336 of file type_traits_queries.hpp.
#define METHOD_CHECKER_ANY | ( | name, | |
fn, | |||
args | |||
) |
Checker for member function accepting given arguments.
Definition at line 342 of file type_traits_queries.hpp.
|
strong |
Enumerating the different groups of type traits.
Enumerator | |
---|---|
NONE | NONE. |
PRIMARY_TYPE_CAT | PRIMARY_TYPE_CAT. |
TYPE_PROPERTIES | TYPE_PROPERTIES. |
COMPOSITE_TYPE_CAT | COMPOSITE_TYPE_CAT. |
SUPPORTED_OPERATIONS | SUPPORTED_OPERATIONS. |
ALL | ALL. |
Definition at line 50 of file type_traits_queries.hpp.
|
noexcept |
Returns true if compiled with >= C++17.
Definition at line 88 of file cpp_lang_util.hpp.
|
noexcept |
Returns true if compiled with >= C++20.
Definition at line 96 of file cpp_lang_util.hpp.
|
noexcept |
Returns true if compiled with >= C++23.
Definition at line 104 of file cpp_lang_util.hpp.
|
noexcept |
Returns true if compiled with >= C++26.
Definition at line 112 of file cpp_lang_util.hpp.
|
noexcept |
Returns true if compiled with RTTI available.
Definition at line 274 of file cpp_lang_util.hpp.
|
constexprnoexcept |
Returns the type name of given type T
using template Compile Time Type Information (CTTI) only with static constant storage duration.
T | the type |
Definition at line 307 of file cpp_lang_util.hpp.
|
constexprnoexcept |
Returns the type name of given function types R(*L)(A...)
using template Compile Time Type Information (CTTI) only with static constant storage duration.
With RTTI or wihout, c-alike function pointer type names like int(*)(int)
do not expose their source location like lambda functions do. Hence they can't be used to compare code identity, but lambda functions can be used.
gcc
or non clang
compilerDue to the lack of standardized Compile-Time Type Information (CTTI), we rely on the non-standardized macro extensions
__PRETTY_FUNCTION__
clang
produces a unique tag using filename and line number, compatible.gcc
produces a non-unique tag using the parent function of the lambda location and its too brief signature, not fully compatible.__FUNCSIG__
msvc++
not testedDue to these restrictions, not using RTTI on gcc
or non clang
compiler will erroneously mistake different lambda functions defined within one function and using same function prototype R<A...>
to be the same.
jau::type_info::limited_lambda_id exposes the potential limitation.
R | function return type |
L | main function type, e.g. a lambda type. |
A | function argument types |
Definition at line 349 of file cpp_lang_util.hpp.
|
noexcept |
Returns the demangled given mangled_name if successful, otherwise the mangled_name.
Implementation utilizes the cross-vendor C++ ABI abi::__cxa_demangle() as supported at least on on gcc
and clang
.
May be used to demangle the result of jau::type_name() or jau::type_info::name() if jau::type_info::rtti_available == true, i.e. RTTI typeif(T) symbols are being used.
See also gcc libstdc++ FAQ, Chapter 28.
Further, implementation also checks whether the mangled_name results from jau::ctti_name<T>() and cleans up the known gcc
and clang
variant of JAU_PRETTY_FUNCTION.
mangled_name | mangled name |
Definition at line 57 of file debug.cpp.
|
noexcept |
Constructs a jau::type_info instance based on given type T
using template Compile Time Type Information (CTTI) only.
This construction function either uses typeid(T)
if jau::type_info::rtti_available == true or jau::ctti_name<T>() otherwise.
T | type for which the type_info is generated |
Definition at line 576 of file cpp_lang_util.hpp.
|
noexcept |
Constructs a jau::type_info instance based on given function types R(*L)(A...)
using template Compile Time Type Information (CTTI) only via RTTI's `typeid(L) if available or jau::ctti_name<R, L, A...>() otherwise.
This construction function either uses typeid(L)
if jau::type_info::rtti_available == true or jau::ctti_name<R, L, A...>() otherwise.
R | function return type used for type_info in case of jau::type_info::rtti_available == false |
L | main function type for which the type_info is generated, e.g. a lambda type. |
A | function argument types used for type_info in case of jau::type_info::rtti_available == false |
Definition at line 600 of file cpp_lang_util.hpp.
|
noexcept |
Returns the type name of given type T
using template Compile Time Type Information (CTTI) only via RTTI's typeid(T).name()
if available or jau::ctti_name<T>() otherwise.
T | type for which the type_info is generated |
Definition at line 618 of file cpp_lang_util.hpp.
|
noexcept |
Returns the type name of given function types R(*L)(A...)
using template Compile Time Type Information (CTTI) only via RTTI's typeid(L).name()
if available or jau::ctti_name<R, L, A...>() otherwise.
R | function return type used for type_info in case of jau::type_info::rtti_available == false |
L | main function type for which the type_info is generated, e.g. a lambda type. |
A | function argument types used for type_info in case of jau::type_info::rtti_available == false |
Definition at line 638 of file cpp_lang_util.hpp.
|
noexcept |
Query whether __builtin_bit_cast(Dest_type, arg)
is available, using jau::has_builtin_bit_cast.
Availability of __builtin_bit_cast(Dest_type, arg)
Reflecting my manual platform tests using test_basictypeconv.cpp
Compiler | Version | Architecture | Available |
---|---|---|---|
GCC | 8.3.0 | amd64, arm64, arm32 | no |
GCC | 10.2.1 | amd64 | no |
GCC | 12.2.0 | amd64 | yes |
clang | 9.0.1 | amd64, arm64 | yes |
clang | 11.0.1 | amd64 | yes |
true
if query subject is available, otherwise not. Definition at line 728 of file cpp_lang_util.hpp.
|
constexprnoexcept |
C++20 bit_cast<>(arg)
implementation for C++17.
Functional if is_builtin_bit_cast_available() evaluates true
.
Dest | the target type |
Source | the source argument type |
src | the value to convert to Dest type |
Definition at line 752 of file cpp_lang_util.hpp.
|
constexprnoexcept |
A constexpr
pointer cast implementation for C++17, inspired by C++20 bit_cast<>(arg)
.
If is_builtin_bit_cast_available() evaluates true
, implementation uses __builtin_bit_cast(Dest, src)
.
Otherwise a simple reinterpret_cast<Dest>(src)
is utilized, which officially is questionable to deliver a constexpr
.
Dest | the target pointer type |
Source | the source pointer argument type |
src | the pointer to convert to Dest pointer type |
Definition at line 787 of file cpp_lang_util.hpp.
|
noexcept |
|
noexcept |
Returns true if compiled with debug information and w/o optimization, i.e.
not defined(NDEBUG) && !defined(DEBUG)
.
Definition at line 817 of file cpp_lang_util.hpp.
|
constexprnoexcept |
Definition at line 58 of file type_traits_queries.hpp.
|
constexprnoexcept |
Definition at line 61 of file type_traits_queries.hpp.
|
constexprnoexcept |
Definition at line 64 of file type_traits_queries.hpp.
|
constexprnoexcept |
Definition at line 67 of file type_traits_queries.hpp.
|
constexprnoexcept |
Definition at line 70 of file type_traits_queries.hpp.
|
constexprnoexcept |
Definition at line 73 of file type_traits_queries.hpp.
|
constexprnoexcept |
|
inlineconstexpr |
Template type trait helper evaluating true if RTTI is available, otherwise false.
_Dummy | unused dummy type to satisfy SFINAE |
Definition at line 271 of file cpp_lang_util.hpp.
|
constexpr |
Value access of has_builtin_bit_cast type trait for convenience .
Dummy_type | just to make template SFINAE happy |
Definition at line 678 of file cpp_lang_util.hpp.
|
inlineconstexpr |
Definition at line 253 of file type_traits_queries.hpp.
|
inlineconstexpr |
Definition at line 269 of file type_traits_queries.hpp.
|
inlineconstexpr |
Definition at line 348 of file type_traits_queries.hpp.
|
inlineconstexpr |
Definition at line 351 of file type_traits_queries.hpp.
|
inlineconstexpr |
Definition at line 360 of file type_traits_queries.hpp.