From dcfd40a1b8aa1a101b025b41bde92b67126a8bb8 Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 6 May 2017 08:36:54 -0700 Subject: [PATCH] Revert #456 Revert #456 because it causes issues for known types (#495) and is not C++98-compatible. --- fmt/format.h | 8 -------- fmt/ostream.h | 34 ---------------------------------- test/ostream-test.cc | 42 ------------------------------------------ 3 files changed, 84 deletions(-) diff --git a/fmt/format.h b/fmt/format.h index f4ca4c95..123dd207 100644 --- a/fmt/format.h +++ b/fmt/format.h @@ -277,14 +277,6 @@ typedef __int64 intmax_t; (FMT_GCC_VERSION >= 303 && FMT_HAS_GXX_CXX11)) #endif -// Checks if decltype v1.1 is supported -// http://en.cppreference.com/w/cpp/compiler_support -#define FMT_HAS_DECLTYPE_INCOMPLETE_RETURN_TYPES \ - (FMT_HAS_FEATURE(cxx_decltype_incomplete_return_types) || \ - (FMT_GCC_VERSION >= 407 && FMT_HAS_GXX_CXX11) || \ - FMT_MSC_VER >= 1900 || \ - FMT_ICC_VERSION >= 1200) - #ifdef FMT_HEADER_ONLY // If header only do not use extern templates. # undef FMT_USE_EXTERN_TEMPLATES diff --git a/fmt/ostream.h b/fmt/ostream.h index 06b6ab56..84a02d17 100644 --- a/fmt/ostream.h +++ b/fmt/ostream.h @@ -68,20 +68,6 @@ struct ConvertToIntImpl { // Write the content of w to os. FMT_API void write(std::ostream &os, Writer &w); - -#if FMT_HAS_DECLTYPE_INCOMPLETE_RETURN_TYPES -template -class is_streamable { - template - static auto test(int) -> decltype(std::declval() << std::declval(), std::true_type()); - - template - static auto test(...) -> std::false_type; - -public: - static constexpr bool value = decltype(test(0))::value; -}; -#endif } // namespace internal // Formats a value. @@ -110,26 +96,6 @@ void format_arg(BasicFormatter &f, */ FMT_API void print(std::ostream &os, CStringRef format_str, ArgList args); FMT_VARIADIC(void, print, std::ostream &, CStringRef) - -#if __cplusplus >= 201103L -template -typename std::enable_if< - !std::is_same< - typename std::remove_cv::type>::type, - char * - >::value, - BasicWriter& ->::type -operator<<(BasicWriter &writer, const T &value) { - FMT_STATIC_ASSERT(internal::is_streamable::value, "T must be Streamable"); - - internal::FormatBuf format_buf(writer.buffer()); - std::basic_ostream output(&format_buf); - output << value; - - return writer; -} -#endif } // namespace fmt #ifdef FMT_HEADER_ONLY diff --git a/test/ostream-test.cc b/test/ostream-test.cc index 0e84f527..4081b43f 100644 --- a/test/ostream-test.cc +++ b/test/ostream-test.cc @@ -111,14 +111,6 @@ std::ostream &operator<<(std::ostream &os, EmptyTest) { return os << ""; } -#if __cplusplus >= 201103L -struct UserDefinedTest { int i = 42; }; - -std::ostream &operator<<(std::ostream &os, const UserDefinedTest &u) { - return os << u.i; -} -#endif - TEST(OStreamTest, EmptyCustomOutput) { EXPECT_EQ("", fmt::format("{}", EmptyTest())); } @@ -137,17 +129,6 @@ TEST(OStreamTest, WriteToOStream) { EXPECT_EQ("foo", os.str()); } -#if __cplusplus >= 201103L -TEST(OStreamTest, WriteUserDefinedTypeToOStream) { - std::ostringstream os; - fmt::MemoryWriter w; - UserDefinedTest u; - w << "The answer is " << u; - fmt::internal::write(os, w); - EXPECT_EQ("The answer is 42", os.str()); -} -#endif - TEST(OStreamTest, WriteToOStreamMaxSize) { std::size_t max_size = std::numeric_limits::max(); std::streamsize max_streamsize = std::numeric_limits::max(); @@ -191,26 +172,3 @@ TEST(OStreamTest, WriteToOStreamMaxSize) { } while (size != 0); fmt::internal::write(os, w); } - -#if __cplusplus >= 201103L -struct Xs { - const size_t size; - const std::string s; - Xs() : size(200), s(size, 'x') {} -}; - -inline std::ostream& operator<<(std::ostream& os, Xs const& xs) { - return os << xs.s; -} - -TEST(OStreamTest, FormatBuf1) { - Xs xs; - fmt::MemoryWriter w; - int n = fmt::internal::INLINE_BUFFER_SIZE / xs.size + 1; - for (int i = 0; i < n; ++i) - w << xs; - EXPECT_EQ(w.size(), size_t(n * xs.size)); - w << xs; - EXPECT_EQ(w.size(), size_t((n + 1) * xs.size)); -} -#endif