Merge branch 'master' of https://github.com/fmtlib/fmt.git
This commit is contained in:
commit
7433fd5ae2
@ -199,7 +199,7 @@ set(FMT_DEBUG_POSTFIX d CACHE STRING "Debug library postfix.")
|
|||||||
|
|
||||||
set_target_properties(fmt PROPERTIES
|
set_target_properties(fmt PROPERTIES
|
||||||
VERSION ${FMT_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}
|
VERSION ${FMT_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}
|
||||||
DEBUG_POSTFIX ${FMT_DEBUG_POSTFIX})
|
DEBUG_POSTFIX "${FMT_DEBUG_POSTFIX}")
|
||||||
|
|
||||||
# Set FMT_LIB_NAME for pkg-config fmt.pc.
|
# Set FMT_LIB_NAME for pkg-config fmt.pc.
|
||||||
get_target_property(FMT_LIB_NAME fmt OUTPUT_NAME)
|
get_target_property(FMT_LIB_NAME fmt OUTPUT_NAME)
|
||||||
|
|||||||
@ -147,8 +147,8 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Workaround broken [[deprecated]] in the Intel compiler and NVCC.
|
// Workaround broken [[deprecated]] in the Intel, PGI and NVCC compilers.
|
||||||
#if defined(__INTEL_COMPILER) || FMT_NVCC
|
#if defined(__INTEL_COMPILER) || defined(__PGI) || FMT_NVCC
|
||||||
# define FMT_DEPRECATED_ALIAS
|
# define FMT_DEPRECATED_ALIAS
|
||||||
#else
|
#else
|
||||||
# define FMT_DEPRECATED_ALIAS FMT_DEPRECATED
|
# define FMT_DEPRECATED_ALIAS FMT_DEPRECATED
|
||||||
@ -950,8 +950,9 @@ template <typename Context> struct arg_mapper {
|
|||||||
FMT_ENABLE_IF(std::is_enum<T>::value &&
|
FMT_ENABLE_IF(std::is_enum<T>::value &&
|
||||||
!has_formatter<T, Context>::value &&
|
!has_formatter<T, Context>::value &&
|
||||||
!has_fallback_formatter<T, Context>::value)>
|
!has_fallback_formatter<T, Context>::value)>
|
||||||
FMT_CONSTEXPR auto map(const T& val) -> decltype(
|
FMT_CONSTEXPR auto map(const T& val)
|
||||||
map(static_cast<typename std::underlying_type<T>::type>(val))) {
|
-> decltype(std::declval<arg_mapper>().map(
|
||||||
|
static_cast<typename std::underlying_type<T>::type>(val))) {
|
||||||
return map(static_cast<typename std::underlying_type<T>::type>(val));
|
return map(static_cast<typename std::underlying_type<T>::type>(val));
|
||||||
}
|
}
|
||||||
template <typename T,
|
template <typename T,
|
||||||
|
|||||||
@ -66,7 +66,7 @@
|
|||||||
#if __cplusplus == 201103L || __cplusplus == 201402L
|
#if __cplusplus == 201103L || __cplusplus == 201402L
|
||||||
# if defined(__clang__)
|
# if defined(__clang__)
|
||||||
# define FMT_FALLTHROUGH [[clang::fallthrough]]
|
# define FMT_FALLTHROUGH [[clang::fallthrough]]
|
||||||
# elif FMT_GCC_VERSION >= 700
|
# elif FMT_GCC_VERSION >= 700 && !defined(__PGI)
|
||||||
# define FMT_FALLTHROUGH [[gnu::fallthrough]]
|
# define FMT_FALLTHROUGH [[gnu::fallthrough]]
|
||||||
# else
|
# else
|
||||||
# define FMT_FALLTHROUGH
|
# define FMT_FALLTHROUGH
|
||||||
|
|||||||
@ -303,6 +303,8 @@ class printf_arg_formatter : public internal::arg_formatter_base<Range> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T> struct printf_formatter {
|
template <typename T> struct printf_formatter {
|
||||||
|
printf_formatter() = delete;
|
||||||
|
|
||||||
template <typename ParseContext>
|
template <typename ParseContext>
|
||||||
auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {
|
auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {
|
||||||
return ctx.begin();
|
return ctx.begin();
|
||||||
@ -320,6 +322,7 @@ template <typename OutputIt, typename Char> class basic_printf_context {
|
|||||||
public:
|
public:
|
||||||
/** The character type for the output. */
|
/** The character type for the output. */
|
||||||
using char_type = Char;
|
using char_type = Char;
|
||||||
|
using iterator = OutputIt;
|
||||||
using format_arg = basic_format_arg<basic_printf_context>;
|
using format_arg = basic_format_arg<basic_printf_context>;
|
||||||
template <typename T> using formatter_type = printf_formatter<T>;
|
template <typename T> using formatter_type = printf_formatter<T>;
|
||||||
|
|
||||||
@ -355,6 +358,8 @@ template <typename OutputIt, typename Char> class basic_printf_context {
|
|||||||
OutputIt out() { return out_; }
|
OutputIt out() { return out_; }
|
||||||
void advance_to(OutputIt it) { out_ = it; }
|
void advance_to(OutputIt it) { out_ = it; }
|
||||||
|
|
||||||
|
internal::locale_ref locale() { return {}; }
|
||||||
|
|
||||||
format_arg arg(int id) const { return args_.get(id); }
|
format_arg arg(int id) const { return args_.get(id); }
|
||||||
|
|
||||||
basic_format_parse_context<Char>& parse_context() { return parse_ctx_; }
|
basic_format_parse_context<Char>& parse_context() { return parse_ctx_; }
|
||||||
|
|||||||
@ -474,9 +474,13 @@ TEST(PrintfTest, Location) {
|
|||||||
// TODO: test %n
|
// TODO: test %n
|
||||||
}
|
}
|
||||||
|
|
||||||
enum E { A = 42 };
|
enum test_enum { answer = 42 };
|
||||||
|
|
||||||
TEST(PrintfTest, Enum) { EXPECT_PRINTF("42", "%d", A); }
|
TEST(PrintfTest, Enum) {
|
||||||
|
EXPECT_PRINTF("42", "%d", answer);
|
||||||
|
volatile test_enum volatile_enum = answer;
|
||||||
|
EXPECT_PRINTF("42", "%d", volatile_enum);
|
||||||
|
}
|
||||||
|
|
||||||
#if FMT_USE_FCNTL
|
#if FMT_USE_FCNTL
|
||||||
TEST(PrintfTest, Examples) {
|
TEST(PrintfTest, Examples) {
|
||||||
@ -498,7 +502,9 @@ TEST(PrintfTest, PrintfError) {
|
|||||||
TEST(PrintfTest, WideString) { EXPECT_EQ(L"abc", fmt::sprintf(L"%s", L"abc")); }
|
TEST(PrintfTest, WideString) { EXPECT_EQ(L"abc", fmt::sprintf(L"%s", L"abc")); }
|
||||||
|
|
||||||
TEST(PrintfTest, PrintfCustom) {
|
TEST(PrintfTest, PrintfCustom) {
|
||||||
EXPECT_EQ("abc", test_sprintf("%s", TestString("abc")));
|
// The test is disabled for now because it requires decoupling
|
||||||
|
// fallback_formatter::format from format_context.
|
||||||
|
//EXPECT_EQ("abc", test_sprintf("%s", TestString("abc")));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(PrintfTest, OStream) {
|
TEST(PrintfTest, OStream) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user