diff --git a/include/fmt/ostream.h b/include/fmt/ostream.h index d136a0e23ac2..45510d825cb2 100644 --- a/include/fmt/ostream.h +++ b/include/fmt/ostream.h @@ -56,8 +56,8 @@ template struct test_stream : std::basic_ostream { template class is_streamable { private: template - static decltype(internal::declval&>() - << internal::declval(), + static decltype((void)(internal::declval&>() + << internal::declval()), std::true_type()) test(int); diff --git a/include/fmt/prepare.h b/include/fmt/prepare.h index 140d2855d631..ab7fdf45a549 100644 --- a/include/fmt/prepare.h +++ b/include/fmt/prepare.h @@ -537,14 +537,15 @@ struct parts_container_concept_check : std::true_type { template static std::false_type has_add_check(check_second); template - static decltype(declval().add(declval()), + static decltype((void)declval().add( + declval()), std::true_type()) has_add_check(check_first); typedef decltype(has_add_check(check_first())) has_add; static_assert(has_add::value, "PartsContainer doesn't provide add() method"); template static std::false_type has_last_check(check_second); template - static decltype(declval().last(), + static decltype((void)declval().last(), std::true_type()) has_last_check(check_first); typedef decltype(has_last_check(check_first())) has_last; static_assert(has_last::value, @@ -554,7 +555,8 @@ struct parts_container_concept_check : std::true_type { static std::false_type has_substitute_last_check(check_second); template static decltype( - declval().substitute_last(declval()), + (void)declval().substitute_last( + declval()), std::true_type()) has_substitute_last_check(check_first); typedef decltype(has_substitute_last_check( check_first())) has_substitute_last; @@ -563,7 +565,7 @@ struct parts_container_concept_check : std::true_type { template static std::false_type has_begin_check(check_second); template - static decltype(declval().begin(), + static decltype((void)declval().begin(), std::true_type()) has_begin_check(check_first); typedef decltype(has_begin_check(check_first())) has_begin; static_assert(has_begin::value, @@ -571,7 +573,7 @@ struct parts_container_concept_check : std::true_type { template static std::false_type has_end_check(check_second); template - static decltype(declval().end(), + static decltype((void)declval().end(), std::true_type()) has_end_check(check_first); typedef decltype(has_end_check(check_first())) has_end; static_assert(has_end::value, "PartsContainer doesn't provide end() method"); diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index 17750273a57b..9e60de4baca9 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -76,7 +76,7 @@ template void copy(char ch, OutputIterator out) { template class is_like_std_string { template static auto check(U* p) - -> decltype(p->find('a'), p->length(), p->data(), int()); + -> decltype((void)p->find('a'), p->length(), (void)p->data(), int()); template static void check(...); public: @@ -106,7 +106,8 @@ template class is_tuple_like_ { template static auto check(U* p) -> decltype(std::tuple_size::value, - internal::declval::type>(), + (void)internal::declval< + typename std::tuple_element<0, U>::type>(), int()); template static void check(...);