diff --git a/include/jwt/detail/meta.hpp b/include/jwt/detail/meta.hpp index 76c6f91..cf02562 100644 --- a/include/jwt/detail/meta.hpp +++ b/include/jwt/detail/meta.hpp @@ -31,7 +31,7 @@ struct empty_type {}; /** */ template -struct has_create_json_obj_member: std::false_type +struct has_create_json_obj_member { }; @@ -72,22 +72,21 @@ template struct is_mapping_concept::value, + std::is_constructible::key_type>::value, void >::type, typename std::enable_if< - std::is_constructible::value, + std::is_constructible::mapped_type>::value, void >::type, decltype( - std::declval().operator[](std::declval()), + std::declval().operator[](std::declval::key_type>()), std::declval().begin(), std::declval().end(), (void)0 ) - > >: std::true_type { diff --git a/include/jwt/parameters.hpp b/include/jwt/parameters.hpp index 07407cc..af16ed7 100644 --- a/include/jwt/parameters.hpp +++ b/include/jwt/parameters.hpp @@ -107,16 +107,6 @@ struct headers_param using param_init_list_t = std::initializer_list>; -/** - */ -template ::type> -detail::payload_param -payload(MappingConcept&& mc) -{ - return { std::forward(mc) }; -} - /** */ detail::payload_param> @@ -131,6 +121,18 @@ payload(const param_init_list_t& kvs) return { std::move(m) }; } +/** + */ +template +detail::payload_param +payload(MappingConcept&& mc) +{ + static_assert (jwt::detail::meta::is_mapping_concept::value, + "Template parameter does not meet the requirements for MappingConcept."); + + return { std::forward(mc) }; +} + /** */ @@ -153,16 +155,6 @@ detail::algorithm_param algorithm(jwt::algorithm alg) return { alg }; } -/** - */ -template ::type> -detail::headers_param -headers(MappingConcept&& mc) -{ - return { std::forward(mc) }; -} - /** */ detail::headers_param> @@ -177,6 +169,18 @@ headers(const param_init_list_t& kvs) return { std::move(m) }; } +/** + */ +template +detail::headers_param +headers(MappingConcept&& mc) +{ + static_assert (jwt::detail::meta::is_mapping_concept::value, + "Template parameter does not meet the requirements for MappingConcept."); + + return { std::forward(mc) }; +} + } // END namespace params } // END namespace jwt diff --git a/include/jwt/test/test_jwt_object b/include/jwt/test/test_jwt_object index c9600cf..855a387 100755 Binary files a/include/jwt/test/test_jwt_object and b/include/jwt/test/test_jwt_object differ diff --git a/include/jwt/test/test_jwt_object.cc b/include/jwt/test/test_jwt_object.cc index b41ffbc..493cecd 100644 --- a/include/jwt/test/test_jwt_object.cc +++ b/include/jwt/test/test_jwt_object.cc @@ -11,12 +11,14 @@ void basic_jwt_object_test() {"a", "b"}, {"c", "d"} })); + //check with std::map std::map m; m["a"] = "b"; m["c"] = "d"; jwt::jwt_object obj1{payload(m)}; + auto obj2 = std::move(obj1); std::cout << obj2.payload() << std::endl;