Instruct msvc to report the _true_ value in __cplusplus and force _full_ C++ conformance

* do this  in _some_ tests to improve test coverage and catch possible problems due to that
 * fix invalid export of `static constexpr` constant
 * fix msvc warnings about unreachable code in high warning levels
This commit is contained in:
Daniela Engert 2021-06-11 12:34:05 +02:00 committed by Victor Zverovich
parent 31a5f0d399
commit 5221242f6e
3 changed files with 17 additions and 8 deletions

View File

@ -2656,21 +2656,28 @@ constexpr auto get_arg_index_by_name(basic_string_view<Char> name) -> int {
if constexpr (detail::is_statically_named_arg<T>()) {
if (name == T::name) return N;
}
if constexpr (sizeof...(Args) > 0)
if constexpr (sizeof...(Args) > 0) {
return get_arg_index_by_name<N + 1, Args...>(name);
} else {
(void)name; // Workaround an MSVC bug about "unused" parameter.
return invalid_arg_index;
}
}
#endif
template <typename... Args, typename Char>
FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view<Char> name) -> int {
#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS
if constexpr (sizeof...(Args) > 0)
if constexpr (sizeof...(Args) > 0) {
return get_arg_index_by_name<0, Args...>(name);
#endif
} else {
(void)name;
return invalid_arg_index;
}
#else
(void)name;
return invalid_arg_index;
#endif
}
template <typename Char, typename ErrorHandler, typename... Args>

View File

@ -394,7 +394,7 @@ struct ostream_params {
FMT_END_DETAIL_NAMESPACE
static constexpr detail::buffer_size buffer_size;
constexpr detail::buffer_size buffer_size;
/** A fast output stream which is not thread-safe. */
class FMT_API ostream final : private detail::buffer<char> {

View File

@ -99,8 +99,10 @@ if (FMT_CAN_MODULE)
add_fmt_test(module-test MODULE)
if (MSVC)
target_compile_options(test-module PRIVATE /utf-8)
target_compile_options(module-test PRIVATE /utf-8)
target_compile_options(test-module PRIVATE /utf-8 /Zc:__cplusplus
/Zc:externConstexpr /Zc:inline)
target_compile_options(module-test PRIVATE /utf-8 /Zc:__cplusplus
/Zc:externConstexpr /Zc:inline)
endif ()
endif ()