From 8bfc7dfcea825ea930e30ce154f460c3a7552ac0 Mon Sep 17 00:00:00 2001 From: jamboree Date: Tue, 9 Jun 2015 17:14:39 +0800 Subject: [PATCH] Prevent nested fmt::arg --- format.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/format.h b/format.h index 0157f939..0441a1ac 100644 --- a/format.h +++ b/format.h @@ -164,10 +164,12 @@ inline uint32_t clzll(uint64_t x) { // This should be used in the private: declarations for a class #if FMT_USE_DELETED_FUNCTIONS || FMT_HAS_FEATURE(cxx_deleted_functions) || \ (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800 +# define FMT_DELETED_OR_UNDEFINED = delete # define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&) = delete; \ TypeName& operator=(const TypeName&) = delete #else +# define FMT_DELETED_OR_UNDEFINED # define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ TypeName& operator=(const TypeName&) @@ -968,11 +970,9 @@ class MakeValue : public Arg { return IsConvertibleToInt::value ? Arg::INT : Arg::CUSTOM; } - template - MakeValue(const NamedArg &value) { pointer = &value; } + MakeValue(const NamedArg &value) { pointer = &value; } - template - static uint64_t type(const NamedArg &) { return Arg::NAMED_ARG; } + static uint64_t type(const NamedArg &) { return Arg::NAMED_ARG; } }; template @@ -2745,6 +2745,12 @@ template inline internal::NamedArg arg(WStringRef name, const T &arg) { return internal::NamedArg(name, arg); } + +template +void arg(StringRef name, const internal::NamedArg&) FMT_DELETED_OR_UNDEFINED; + +template +void arg(WStringRef name, const internal::NamedArg&) FMT_DELETED_OR_UNDEFINED; } #if FMT_GCC_VERSION