@@ -928,12 +928,13 @@ inline auto to_string(std::same_as<std::any> auto const&) -> std::string
928
928
return " std::any" ;
929
929
}
930
930
931
- inline auto to_string (bool b) -> std::string
931
+ inline auto to_string (std::same_as< bool > auto b) -> std::string
932
932
{
933
933
return b ? " true" : " false" ;
934
934
}
935
935
936
936
template <typename T>
937
+ requires (!std::same_as<T, bool >)
937
938
inline auto to_string (T&& t) -> std::string
938
939
requires requires { std::to_string (t); }
939
940
{
@@ -945,7 +946,8 @@ inline auto to_string(char const& t) -> std::string
945
946
return std::string{t};
946
947
}
947
948
948
- inline auto to_string (char const * s) -> std::string
949
+ template <std::same_as<char const *> X>
950
+ inline auto to_string (X& s) -> std::string
949
951
{
950
952
return std::string{s};
951
953
}
@@ -1037,19 +1039,13 @@ inline auto to_string(auto&& value, std::string_view) -> std::string
1037
1039
template <typename T>
1038
1040
concept has_to_string_overload = requires{ static_cast <std::string (*)(T const &)>(&to_string); };
1039
1041
1040
- template < std::same_as<std::string> C, non_string X>
1042
+ template < std::same_as<std::string> C, typename X>
1041
1043
requires has_to_string_overload<X>
1042
1044
auto as ( X&& x) -> C
1043
1045
{
1044
1046
return cpp2::to_string (CPP2_FORWARD (x));
1045
1047
}
1046
1048
1047
- template < std::same_as<std::string> C>
1048
- auto as (bool x) -> C
1049
- {
1050
- return cpp2::to_string (x);
1051
- }
1052
-
1053
1049
template < std::same_as<std::string> C, std::size_t N>
1054
1050
auto as (const char (&x)[N]) -> C
1055
1051
{
0 commit comments