diff --git a/headers/meta.hpp/meta_base.hpp b/headers/meta.hpp/meta_base.hpp index 1eefff8..0840599 100644 --- a/headers/meta.hpp/meta_base.hpp +++ b/headers/meta.hpp/meta_base.hpp @@ -39,10 +39,11 @@ #include "meta_base/cvref_traits.hpp" #include "meta_base/fixed_function.hpp" #include "meta_base/hash_combiner.hpp" +#include "meta_base/is_in_place_type.hpp" #include "meta_base/noncopyable.hpp" #include "meta_base/overloaded.hpp" #include "meta_base/select_overload.hpp" -#include "meta_base/stdex.hpp" +#include "meta_base/to_underlying.hpp" #include "meta_base/type_id.hpp" #include "meta_base/type_kinds.hpp" #include "meta_base/type_list.hpp" diff --git a/headers/meta.hpp/meta_base/stdex.hpp b/headers/meta.hpp/meta_base/is_in_place_type.hpp similarity index 74% rename from headers/meta.hpp/meta_base/stdex.hpp rename to headers/meta.hpp/meta_base/is_in_place_type.hpp index d13bf68..b9c0648 100644 --- a/headers/meta.hpp/meta_base/stdex.hpp +++ b/headers/meta.hpp/meta_base/is_in_place_type.hpp @@ -9,7 +9,7 @@ #include #include -namespace meta_hpp::stdex +namespace meta_hpp::detail { template < typename T > struct is_in_place_type : std::false_type {}; @@ -20,11 +20,3 @@ namespace meta_hpp::stdex template < typename T > inline constexpr bool is_in_place_type_v = is_in_place_type::value; } - -namespace meta_hpp::stdex -{ - template < typename Enum > - [[nodiscard]] constexpr std::underlying_type_t to_underlying(Enum e) noexcept { - return static_cast>(e); - } -} diff --git a/headers/meta.hpp/meta_base/to_underlying.hpp b/headers/meta.hpp/meta_base/to_underlying.hpp new file mode 100644 index 0000000..f4bd77f --- /dev/null +++ b/headers/meta.hpp/meta_base/to_underlying.hpp @@ -0,0 +1,17 @@ +/******************************************************************************* + * This file is part of the "https://github.com/blackmatov/meta.hpp" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2021-2022, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#pragma once + +#include + +namespace meta_hpp::detail +{ + template < typename Enum > + [[nodiscard]] constexpr std::underlying_type_t to_underlying(Enum e) noexcept { + return static_cast>(e); + } +} diff --git a/headers/meta.hpp/meta_states/constructor.hpp b/headers/meta.hpp/meta_states/constructor.hpp index 5283ce5..6fd5840 100644 --- a/headers/meta.hpp/meta_states/constructor.hpp +++ b/headers/meta.hpp/meta_states/constructor.hpp @@ -87,7 +87,7 @@ namespace meta_hpp::detail template < class_kind Class, typename... Args > argument_list make_constructor_arguments() { - using ct = detail::constructor_traits; + using ct = constructor_traits; using ct_argument_types = typename ct::argument_types; argument_list arguments; @@ -95,8 +95,8 @@ namespace meta_hpp::detail [&arguments](std::index_sequence) mutable { [[maybe_unused]] const auto make_argument = [](std::index_sequence){ - using P = detail::type_list_at_t; - return argument{detail::argument_state::make

(I, metadata_map{})}; + using P = type_list_at_t; + return argument{argument_state::make

(I, metadata_map{})}; }; (arguments.push_back(make_argument(std::index_sequence{})), ...); }(std::make_index_sequence()); diff --git a/headers/meta.hpp/meta_states/evalue.hpp b/headers/meta.hpp/meta_states/evalue.hpp index 1f74966..ad40296 100644 --- a/headers/meta.hpp/meta_states/evalue.hpp +++ b/headers/meta.hpp/meta_states/evalue.hpp @@ -19,7 +19,7 @@ namespace meta_hpp::detail .index{evalue_index::make(std::move(name))}, .metadata{std::move(metadata)}, .enum_value{uvalue{evalue}}, - .underlying_value{uvalue{stdex::to_underlying(evalue)}}, + .underlying_value{uvalue{to_underlying(evalue)}}, }); } } diff --git a/headers/meta.hpp/meta_states/function.hpp b/headers/meta.hpp/meta_states/function.hpp index dbd5120..eea4091 100644 --- a/headers/meta.hpp/meta_states/function.hpp +++ b/headers/meta.hpp/meta_states/function.hpp @@ -95,7 +95,7 @@ namespace meta_hpp::detail template < function_kind Function > argument_list make_function_arguments() { - using ft = detail::function_traits; + using ft = function_traits; using ft_argument_types = typename ft::argument_types; argument_list arguments; @@ -103,8 +103,8 @@ namespace meta_hpp::detail [&arguments](std::index_sequence) mutable { [[maybe_unused]] const auto make_argument = [](std::index_sequence){ - using P = detail::type_list_at_t; - return argument{detail::argument_state::make

(I, metadata_map{})}; + using P = type_list_at_t; + return argument{argument_state::make

(I, metadata_map{})}; }; (arguments.push_back(make_argument(std::index_sequence{})), ...); }(std::make_index_sequence()); diff --git a/headers/meta.hpp/meta_states/method.hpp b/headers/meta.hpp/meta_states/method.hpp index 09c222c..5a3c212 100644 --- a/headers/meta.hpp/meta_states/method.hpp +++ b/headers/meta.hpp/meta_states/method.hpp @@ -106,7 +106,7 @@ namespace meta_hpp::detail template < method_kind Method > argument_list make_method_arguments() { - using mt = detail::method_traits; + using mt = method_traits; using mt_argument_types = typename mt::argument_types; argument_list arguments; @@ -114,8 +114,8 @@ namespace meta_hpp::detail [&arguments](std::index_sequence) mutable { [[maybe_unused]] const auto make_argument = [](std::index_sequence){ - using P = detail::type_list_at_t; - return argument{detail::argument_state::make

(I, metadata_map{})}; + using P = type_list_at_t; + return argument{argument_state::make

(I, metadata_map{})}; }; (arguments.push_back(make_argument(std::index_sequence{})), ...); }(std::make_index_sequence()); diff --git a/headers/meta.hpp/meta_uvalue.hpp b/headers/meta.hpp/meta_uvalue.hpp index 368b3b9..c179a1d 100644 --- a/headers/meta.hpp/meta_uvalue.hpp +++ b/headers/meta.hpp/meta_uvalue.hpp @@ -39,7 +39,7 @@ namespace meta_hpp template < detail::decay_non_value_kind T > requires std::is_copy_constructible_v> - && (!stdex::is_in_place_type_v>) + && (!detail::is_in_place_type_v>) // NOLINTNEXTLINE(*-forwarding-reference-overload) explicit uvalue(T&& val); diff --git a/headers/meta.hpp/meta_uvalue/uvalue.hpp b/headers/meta.hpp/meta_uvalue/uvalue.hpp index 6f9db24..3a2fabd 100644 --- a/headers/meta.hpp/meta_uvalue/uvalue.hpp +++ b/headers/meta.hpp/meta_uvalue/uvalue.hpp @@ -257,7 +257,7 @@ namespace meta_hpp template < detail::decay_non_value_kind T > requires std::is_copy_constructible_v> - && (!stdex::is_in_place_type_v>) + && (!detail::is_in_place_type_v>) // NOLINTNEXTLINE(*-forwarding-reference-overload) uvalue::uvalue(T&& val) { vtable_t::construct(*this, std::forward(val)); diff --git a/singles/headers/meta.hpp/meta_all.hpp b/singles/headers/meta.hpp/meta_all.hpp index 5b96df1..541a989 100644 --- a/singles/headers/meta.hpp/meta_all.hpp +++ b/singles/headers/meta.hpp/meta_all.hpp @@ -495,6 +495,18 @@ namespace meta_hpp::detail }; } +namespace meta_hpp::detail +{ + template < typename T > + struct is_in_place_type : std::false_type {}; + + template < typename U > + struct is_in_place_type> : std::true_type {}; + + template < typename T > + inline constexpr bool is_in_place_type_v = is_in_place_type::value; +} + namespace meta_hpp::detail { class noncopyable { @@ -553,19 +565,7 @@ namespace meta_hpp::detail } } -namespace meta_hpp::stdex -{ - template < typename T > - struct is_in_place_type : std::false_type {}; - - template < typename U > - struct is_in_place_type> : std::true_type {}; - - template < typename T > - inline constexpr bool is_in_place_type_v = is_in_place_type::value; -} - -namespace meta_hpp::stdex +namespace meta_hpp::detail { template < typename Enum > [[nodiscard]] constexpr std::underlying_type_t to_underlying(Enum e) noexcept { @@ -2228,7 +2228,7 @@ namespace meta_hpp template < detail::decay_non_value_kind T > requires std::is_copy_constructible_v> - && (!stdex::is_in_place_type_v>) + && (!detail::is_in_place_type_v>) // NOLINTNEXTLINE(*-forwarding-reference-overload) explicit uvalue(T&& val); @@ -5227,7 +5227,7 @@ namespace meta_hpp::detail template < class_kind Class, typename... Args > argument_list make_constructor_arguments() { - using ct = detail::constructor_traits; + using ct = constructor_traits; using ct_argument_types = typename ct::argument_types; argument_list arguments; @@ -5235,8 +5235,8 @@ namespace meta_hpp::detail [&arguments](std::index_sequence) mutable { [[maybe_unused]] const auto make_argument = [](std::index_sequence){ - using P = detail::type_list_at_t; - return argument{detail::argument_state::make

(I, metadata_map{})}; + using P = type_list_at_t; + return argument{argument_state::make

(I, metadata_map{})}; }; (arguments.push_back(make_argument(std::index_sequence{})), ...); }(std::make_index_sequence()); @@ -5573,7 +5573,7 @@ namespace meta_hpp::detail .index{evalue_index::make(std::move(name))}, .metadata{std::move(metadata)}, .enum_value{uvalue{evalue}}, - .underlying_value{uvalue{stdex::to_underlying(evalue)}}, + .underlying_value{uvalue{to_underlying(evalue)}}, }); } } @@ -5759,7 +5759,7 @@ namespace meta_hpp::detail template < function_kind Function > argument_list make_function_arguments() { - using ft = detail::function_traits; + using ft = function_traits; using ft_argument_types = typename ft::argument_types; argument_list arguments; @@ -5767,8 +5767,8 @@ namespace meta_hpp::detail [&arguments](std::index_sequence) mutable { [[maybe_unused]] const auto make_argument = [](std::index_sequence){ - using P = detail::type_list_at_t; - return argument{detail::argument_state::make

(I, metadata_map{})}; + using P = type_list_at_t; + return argument{argument_state::make

(I, metadata_map{})}; }; (arguments.push_back(make_argument(std::index_sequence{})), ...); }(std::make_index_sequence()); @@ -6542,7 +6542,7 @@ namespace meta_hpp::detail template < method_kind Method > argument_list make_method_arguments() { - using mt = detail::method_traits; + using mt = method_traits; using mt_argument_types = typename mt::argument_types; argument_list arguments; @@ -6550,8 +6550,8 @@ namespace meta_hpp::detail [&arguments](std::index_sequence) mutable { [[maybe_unused]] const auto make_argument = [](std::index_sequence){ - using P = detail::type_list_at_t; - return argument{detail::argument_state::make

(I, metadata_map{})}; + using P = type_list_at_t; + return argument{argument_state::make

(I, metadata_map{})}; }; (arguments.push_back(make_argument(std::index_sequence{})), ...); }(std::make_index_sequence()); @@ -8260,7 +8260,7 @@ namespace meta_hpp template < detail::decay_non_value_kind T > requires std::is_copy_constructible_v> - && (!stdex::is_in_place_type_v>) + && (!detail::is_in_place_type_v>) // NOLINTNEXTLINE(*-forwarding-reference-overload) uvalue::uvalue(T&& val) { vtable_t::construct(*this, std::forward(val)); diff --git a/untests/meta_states/evalue_tests.cpp b/untests/meta_states/evalue_tests.cpp index ddfd4db..961ad44 100644 --- a/untests/meta_states/evalue_tests.cpp +++ b/untests/meta_states/evalue_tests.cpp @@ -56,7 +56,7 @@ TEST_CASE("meta/meta_states/evalue") { CHECK(evalue.get_value() == color::green); CHECK(evalue.get_value().get_type() == color_type); - CHECK(evalue.get_underlying_value() == meta::stdex::to_underlying(color::green)); + CHECK(evalue.get_underlying_value() == meta::detail::to_underlying(color::green)); CHECK(evalue.get_underlying_value().get_type() == color_type.get_underlying_type()); } } diff --git a/untests/meta_types/enum_type_tests.cpp b/untests/meta_types/enum_type_tests.cpp index e312a6f..764ebc0 100644 --- a/untests/meta_types/enum_type_tests.cpp +++ b/untests/meta_types/enum_type_tests.cpp @@ -90,7 +90,7 @@ TEST_CASE("meta/meta_types/enum_type") { const meta::evalue green_value = color_type.get_evalue("green"); REQUIRE(green_value); CHECK(green_value.get_value() == color::green); - CHECK(green_value.get_underlying_value() == meta::stdex::to_underlying(color::green)); + CHECK(green_value.get_underlying_value() == meta::detail::to_underlying(color::green)); } { @@ -107,7 +107,7 @@ TEST_CASE("meta/meta_types/enum_type") { const meta::evalue green_value = ecolor_type.get_evalue("green"); REQUIRE(green_value); CHECK(green_value.get_value() == ecolor_green); - CHECK(green_value.get_underlying_value() == meta::stdex::to_underlying(ecolor_green)); + CHECK(green_value.get_underlying_value() == meta::detail::to_underlying(ecolor_green)); } {