update doc
This commit is contained in:
parent
1f071407dc
commit
6708611448
9 changed files with 157 additions and 19 deletions
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2016 - 2022 Daniil Goncharov
|
Copyright (c) 2016 - 2023 Daniil Goncharov
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -28,6 +28,7 @@ Header-only C++17 library provides nameof macros and functions to simply obtain
|
||||||
* Compile-time
|
* Compile-time
|
||||||
* Name of variable, member variable
|
* Name of variable, member variable
|
||||||
* Name of type, variable type
|
* Name of type, variable type
|
||||||
|
* Name of member, pointer
|
||||||
* Name of function, member function
|
* Name of function, member function
|
||||||
* Name of enum, enum variable
|
* Name of enum, enum variable
|
||||||
* Name of macro
|
* Name of macro
|
||||||
|
@ -149,9 +150,6 @@ CPMAddPackage(
|
||||||
|
|
||||||
## Compiler compatibility
|
## Compiler compatibility
|
||||||
|
|
||||||
* Clang/LLVM >= 6
|
Check in the [reference](doc/reference.md) for each features.
|
||||||
* MSVC++ >= 14.11 / Visual Studio >= 2017
|
|
||||||
* Xcode >= 10
|
|
||||||
* GCC >= 7 (GCC >= 9 for NAMEOF_ENUM)
|
|
||||||
|
|
||||||
## Licensed under the [MIT License](LICENSE)
|
## Licensed under the [MIT License](LICENSE)
|
||||||
|
|
|
@ -16,6 +16,12 @@
|
||||||
* To check if nameof_type_rtti is supported by your compiler use macro `NAMEOF_TYPE_RTTI_SUPPORTED` or constexpr constant `nameof::is_nameof_type_rtti_supported`.</br>
|
* To check if nameof_type_rtti is supported by your compiler use macro `NAMEOF_TYPE_RTTI_SUPPORTED` or constexpr constant `nameof::is_nameof_type_rtti_supported`.</br>
|
||||||
If nameof_type_rtti is used on an unsupported compiler, a compilation error occurs. To suppress the error define the macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
If nameof_type_rtti is used on an unsupported compiler, a compilation error occurs. To suppress the error define the macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
|
* To check is nameof_member supported compiler use macro `NAMEOF_MEMBER_SUPPORTED` or constexpr constant `nameof::is_nameof_member_supported`.</br>
|
||||||
|
If nameof_member used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
|
* To check is nameof_pointer supported compiler use macro `NAMEOF_POINTER_SUPPORTED` or constexpr constant `nameof::is_nameof_pointer_supported`.</br>
|
||||||
|
If nameof_pointer used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
## Nameof Enum
|
## Nameof Enum
|
||||||
|
|
||||||
* This library uses a compiler-specific hack (based on `__PRETTY_FUNCTION__` / `__FUNCSIG__`), which works on Clang >= 5, MSVC >= 15.3 and GCC >= 9.
|
* This library uses a compiler-specific hack (based on `__PRETTY_FUNCTION__` / `__FUNCSIG__`), which works on Clang >= 5, MSVC >= 15.3 and GCC >= 9.
|
||||||
|
|
139
doc/reference.md
139
doc/reference.md
|
@ -16,19 +16,27 @@
|
||||||
* [`NAMEOF_TYPE_RTTI` obtains type name, using RTTI.](#nameof_type_rtti)
|
* [`NAMEOF_TYPE_RTTI` obtains type name, using RTTI.](#nameof_type_rtti)
|
||||||
* [`NAMEOF_FULL_TYPE_RTTI` obtains short type name, using RTTI.](#nameof_full_type_rtti)
|
* [`NAMEOF_FULL_TYPE_RTTI` obtains short type name, using RTTI.](#nameof_full_type_rtti)
|
||||||
* [`NAMEOF_SHORT_TYPE_RTTI` obtains short type name, using RTTI.](#nameof_short_type_rtti)
|
* [`NAMEOF_SHORT_TYPE_RTTI` obtains short type name, using RTTI.](#nameof_short_type_rtti)
|
||||||
|
* [`NAMEOF_MEMBER` obtains name of member.](#nameof_member)
|
||||||
|
* [`NAMEOF_POINTER` obtains name of a function, a global or class static variable.](#nameof_pointer)
|
||||||
|
|
||||||
## Synopsis
|
## Synopsis
|
||||||
|
|
||||||
* Before use, read the [limitations](limitations.md) of functionality.
|
* Before use, read the [limitations](limitations.md) of functionality.
|
||||||
|
|
||||||
|
* To check is nameof_enum supported compiler use macro `NAMEOF_ENUM_SUPPORTED` or constexpr constant `nameof::is_nameof_enum_supported`.</br>
|
||||||
|
If nameof_enum used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_ENUM_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
* To check is nameof_type supported compiler use macro `NAMEOF_TYPE_SUPPORTED` or constexpr constant `nameof::is_nameof_type_supported`.</br>
|
* To check is nameof_type supported compiler use macro `NAMEOF_TYPE_SUPPORTED` or constexpr constant `nameof::is_nameof_type_supported`.</br>
|
||||||
If nameof_type used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
If nameof_type used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
* To check is nameof_type_rtti supported compiler use macro `NAMEOF_TYPE_RTTI_SUPPORTED` or constexpr constant `nameof::is_nameof_type_rtti_supported`.</br>
|
* To check is nameof_type_rtti supported compiler use macro `NAMEOF_TYPE_RTTI_SUPPORTED` or constexpr constant `nameof::is_nameof_type_rtti_supported`.</br>
|
||||||
If nameof_type used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
If nameof_type used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
* To check is nameof_enum supported compiler use macro `NAMEOF_ENUM_SUPPORTED` or constexpr constant `nameof::is_nameof_enum_supported`.</br>
|
* To check is nameof_member supported compiler use macro `NAMEOF_MEMBER_SUPPORTED` or constexpr constant `nameof::is_nameof_member_supported`.</br>
|
||||||
If nameof_enum used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_ENUM_NO_CHECK_SUPPORT`.
|
If nameof_member used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
|
* To check is nameof_pointer supported compiler use macro `NAMEOF_POINTER_SUPPORTED` or constexpr constant `nameof::is_nameof_pointer_supported`.</br>
|
||||||
|
If nameof_pointer used on unsupported compiler, occurs the compilation error. To suppress error define macro `NAMEOF_TYPE_NO_CHECK_SUPPORT`.
|
||||||
|
|
||||||
* To add custom enum or type names see the [example](../example/example_custom_name.cpp).
|
* To add custom enum or type names see the [example](../example/example_custom_name.cpp).
|
||||||
|
|
||||||
|
@ -71,6 +79,11 @@
|
||||||
NAMEOF(NAMEOF(structvar)) -> "NAMEOF"
|
NAMEOF(NAMEOF(structvar)) -> "NAMEOF"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_FULL`
|
## `NAMEOF_FULL`
|
||||||
|
|
||||||
* Obtains full (with template suffix) name of variable, function, macro.
|
* Obtains full (with template suffix) name of variable, function, macro.
|
||||||
|
@ -89,6 +102,11 @@
|
||||||
NAMEOF_FULL(somevar.some_method<int>()) -> "some_method<int>"
|
NAMEOF_FULL(somevar.some_method<int>()) -> "some_method<int>"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_RAW`
|
## `NAMEOF_RAW`
|
||||||
|
|
||||||
* Obtains raw name of variable, function, macro.
|
* Obtains raw name of variable, function, macro.
|
||||||
|
@ -104,6 +122,10 @@
|
||||||
NAMEOF_RAW(&some_class::some_method<int>) -> "&some_class::some_method<int>"
|
NAMEOF_RAW(&some_class::some_method<int>) -> "&some_class::some_method<int>"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_ENUM`
|
## `NAMEOF_ENUM`
|
||||||
|
|
||||||
|
@ -121,6 +143,11 @@
|
||||||
nameof::nameof_enum(color) -> "RED"
|
nameof::nameof_enum(color) -> "RED"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 9 and C++ >= 17</br>
|
||||||
|
|
||||||
# `NAMEOF_ENUM_OR`
|
# `NAMEOF_ENUM_OR`
|
||||||
|
|
||||||
* Obtains name of enum variable or default value if enum variable out of range.
|
* Obtains name of enum variable or default value if enum variable out of range.
|
||||||
|
@ -129,6 +156,19 @@
|
||||||
|
|
||||||
* If argument does not have name or [out of range](limitations.md#nameof-enum), returns `default_value`.
|
* If argument does not have name or [out of range](limitations.md#nameof-enum), returns `default_value`.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
auto color = Color::RED;
|
||||||
|
NAMEOF_ENUM_OR(color, "none") -> "RED"
|
||||||
|
NAMEOF_ENUM_OR((Color)-1, "none") -> "none"
|
||||||
|
nameof::nameof_enum_or(color, "none") -> "RED"
|
||||||
|
nameof::nameof_enum_or((Color)-1, "none") -> "none"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 9 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_ENUM_CONST`
|
## `NAMEOF_ENUM_CONST`
|
||||||
|
|
||||||
* Obtains name of static storage enum variable.
|
* Obtains name of static storage enum variable.
|
||||||
|
@ -146,6 +186,11 @@
|
||||||
nameof::nameof_enum<Color::GREEN>() -> "GREEN"
|
nameof::nameof_enum<Color::GREEN>() -> "GREEN"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 9 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_ENUM_FLAG`
|
## `NAMEOF_ENUM_FLAG`
|
||||||
|
|
||||||
* Obtains name of enum flag variable.
|
* Obtains name of enum flag variable.
|
||||||
|
@ -171,6 +216,11 @@
|
||||||
nameof_enum(HasClaws | CanFly) -> ""
|
nameof_enum(HasClaws | CanFly) -> ""
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 9 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_TYPE`
|
## `NAMEOF_TYPE`
|
||||||
|
|
||||||
* Obtains type name, reference and cv-qualifiers are ignored.
|
* Obtains type name, reference and cv-qualifiers are ignored.
|
||||||
|
@ -192,6 +242,11 @@
|
||||||
nameof::nameof_type<T>() -> "int"
|
nameof::nameof_type<T>() -> "int"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_FULL_TYPE`
|
## `NAMEOF_FULL_TYPE`
|
||||||
|
|
||||||
* Obtains full type name, with reference and cv-qualifiers.
|
* Obtains full type name, with reference and cv-qualifiers.
|
||||||
|
@ -210,6 +265,11 @@
|
||||||
nameof::nameof_full_type<T>() -> "const int&"
|
nameof::nameof_full_type<T>() -> "const int&"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_SHORT_TYPE`
|
## `NAMEOF_SHORT_TYPE`
|
||||||
|
|
||||||
* Obtains short type name.
|
* Obtains short type name.
|
||||||
|
@ -228,6 +288,11 @@
|
||||||
nameof::nameof_short_type<T>() -> "SomeClass"
|
nameof::nameof_short_type<T>() -> "SomeClass"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_TYPE_EXPR`
|
## `NAMEOF_TYPE_EXPR`
|
||||||
|
|
||||||
* Obtains string name type of expression, reference and cv-qualifiers are ignored.
|
* Obtains string name type of expression, reference and cv-qualifiers are ignored.
|
||||||
|
@ -249,6 +314,11 @@
|
||||||
nameof::nameof_type<decltype(var)>() -> "int"
|
nameof::nameof_type<decltype(var)>() -> "int"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_FULL_TYPE_EXPR`
|
## `NAMEOF_FULL_TYPE_EXPR`
|
||||||
|
|
||||||
* Obtains full type name of expression, with reference and cv-qualifiers.
|
* Obtains full type name of expression, with reference and cv-qualifiers.
|
||||||
|
@ -268,6 +338,11 @@
|
||||||
nameof::nameof_full_type<decltype(var)>() -> "const int&"
|
nameof::nameof_full_type<decltype(var)>() -> "const int&"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_SHORT_TYPE_EXPR`
|
## `NAMEOF_SHORT_TYPE_EXPR`
|
||||||
|
|
||||||
* Obtains short type name of expression.
|
* Obtains short type name of expression.
|
||||||
|
@ -286,6 +361,11 @@
|
||||||
nameof::nameof_short_type<decltype(var)>() -> "SomeClass"
|
nameof::nameof_short_type<decltype(var)>() -> "SomeClass"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
## `NAMEOF_TYPE_RTTI`
|
## `NAMEOF_TYPE_RTTI`
|
||||||
|
|
||||||
* Obtains type name, using RTTI.
|
* Obtains type name, using RTTI.
|
||||||
|
@ -299,6 +379,11 @@
|
||||||
NAMEOF_TYPE_RTTI(*ptr) -> "my::detail::Derived"
|
NAMEOF_TYPE_RTTI(*ptr) -> "my::detail::Derived"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17 and RTTI enabled</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17 and RTTI enabled</br>
|
||||||
|
GCC >= 7 and C++ >= 17 and RTTI enabled</br>
|
||||||
|
|
||||||
## `NAMEOF_FULL_TYPE_RTTI`
|
## `NAMEOF_FULL_TYPE_RTTI`
|
||||||
|
|
||||||
* Obtains full type name, using RTTI.
|
* Obtains full type name, using RTTI.
|
||||||
|
@ -324,3 +409,53 @@
|
||||||
volatile const my::detail::Base* ptr = new my::detail::Derived();
|
volatile const my::detail::Base* ptr = new my::detail::Derived();
|
||||||
NAMEOF_SHORT_TYPE_RTTI(*ptr) -> "Derived"
|
NAMEOF_SHORT_TYPE_RTTI(*ptr) -> "Derived"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17 and RTTI enabled</br>
|
||||||
|
Visual Studio >= 2017 and C++ >= 17 and RTTI enabled</br>
|
||||||
|
GCC >= 7 and C++ >= 17 and RTTI enabled</br>
|
||||||
|
|
||||||
|
## `NAMEOF_MEMBER`
|
||||||
|
|
||||||
|
* Obtains name of member.
|
||||||
|
|
||||||
|
* Returns `string_view`.
|
||||||
|
|
||||||
|
* Examples
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
struct A {
|
||||||
|
int this_is_the_name;
|
||||||
|
};
|
||||||
|
// ..
|
||||||
|
NAMEOF_MEMBER(&A::this_is_the_name) -> "this_is_the_name"
|
||||||
|
nameof::nameof_member(&A::this_is_the_name) -> "this_is_the_name"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2022 and C++ >= 20</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
||||||
|
## `NAMEOF_POINTER`
|
||||||
|
|
||||||
|
* Obtains name of a function, a global or class static variable.
|
||||||
|
|
||||||
|
* Returns `string_view`.
|
||||||
|
|
||||||
|
* Examples
|
||||||
|
```cpp
|
||||||
|
int someglobalvariable = 0;
|
||||||
|
// ..
|
||||||
|
NAMEOF_POINTER(&someglobalconstvariable) == "someglobalconstvariable"
|
||||||
|
nameof::nameof_pointer(&someglobalconstvariable) == "someglobalconstvariable"
|
||||||
|
|
||||||
|
constexpr auto global_ptr = &someglobalvariable;
|
||||||
|
NAMEOF_POINTER(global_ptr) == "someglobalconstvariable"
|
||||||
|
nameof::nameof_pointer(global_ptr) == "someglobalconstvariable"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Compiler compatibility
|
||||||
|
Clang/LLVM >= 5 and C++ >= 17</br>
|
||||||
|
Visual Studio >= 2022 and C++ >= 20</br>
|
||||||
|
GCC >= 7 and C++ >= 17</br>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
// Copyright (c) 2018 - 2022 Daniil Goncharov <neargye@gmail.com>.
|
// Copyright (c) 2018 - 2023 Daniil Goncharov <neargye@gmail.com>.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
// Copyright (c) 2020 - 2022 Daniil Goncharov <neargye@gmail.com>.
|
// Copyright (c) 2020 - 2023 Daniil Goncharov <neargye@gmail.com>.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
//
|
//
|
||||||
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
// Copyright (c) 2016 - 2022 Daniil Goncharov <neargye@gmail.com>.
|
// Copyright (c) 2016 - 2023 Daniil Goncharov <neargye@gmail.com>.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1009,7 +1009,7 @@ constexpr auto get_member_name() noexcept {
|
||||||
return n<V>();
|
return n<V>();
|
||||||
} else {
|
} else {
|
||||||
constexpr bool is_defined = sizeof(decltype(get_base_type(V))) != 0;
|
constexpr bool is_defined = sizeof(decltype(get_base_type(V))) != 0;
|
||||||
static_assert(is_defined, "Member name can use only if the struct is already fully defined. Please use NAMEOF macro, or separate definition and declaration.");
|
static_assert(is_defined, "nameof::nameof_member member name can use only if the struct is already fully defined. Please use NAMEOF macro, or separate definition and declaration.");
|
||||||
if constexpr (is_defined) {
|
if constexpr (is_defined) {
|
||||||
return n<V, &(union_type_holder<decltype(get_base_type(V))>::value.f.*V)>();
|
return n<V, &(union_type_holder<decltype(get_base_type(V))>::value.f.*V)>();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1036,8 +1036,7 @@ constexpr bool is_nullptr_v = is_same<P, static_cast<std::remove_reference_t<dec
|
||||||
|
|
||||||
template <auto V>
|
template <auto V>
|
||||||
constexpr auto p() noexcept {
|
constexpr auto p() noexcept {
|
||||||
[[maybe_unused]] constexpr auto custom_name =
|
[[maybe_unused]] constexpr auto custom_name = customize::pointer_name<V>().empty() && is_nullptr_v<V> ? "nullptr" : customize::pointer_name<V>();
|
||||||
customize::pointer_name<V>().empty() && is_nullptr_v<V> ? "nullptr" : customize::pointer_name<V>();
|
|
||||||
|
|
||||||
if constexpr (custom_name.empty() && nameof_pointer_supported<decltype(V)>::value) {
|
if constexpr (custom_name.empty() && nameof_pointer_supported<decltype(V)>::value) {
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
// Copyright (c) 2018 - 2022 Daniil Goncharov <neargye@gmail.com>.
|
// Copyright (c) 2018 - 2023 Daniil Goncharov <neargye@gmail.com>.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
// Copyright (c) 2019 - 2022 Daniil Goncharov <neargye@gmail.com>.
|
// Copyright (c) 2019 - 2023 Daniil Goncharov <neargye@gmail.com>.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
Loading…
Reference in a new issue