Skip to content

Commit

Permalink
Fix an odr violation in ranges.h (#2483)
Browse files Browse the repository at this point in the history
* Add a testcase demonstrating ODR violation in ranges.h

* Fix ODR violation in ranges.h

* Fix comments

Co-authored-by: Pierre-Antoine Lacaze <[email protected]>
  • Loading branch information
palacaze and Pierre-Antoine Lacaze authored Sep 2, 2021
1 parent ee0659f commit d58d19b
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
2 changes: 1 addition & 1 deletion include/fmt/ranges.h
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ auto find_escape(const Char* begin, const Char* end)
return {begin, nullptr, 0};
}

auto find_escape(const char* begin, const char* end)
inline auto find_escape(const char* begin, const char* end)
-> find_escape_result<char> {
if (!is_utf8()) return find_escape<char>(begin, end);
auto result = find_escape_result<char>{end, nullptr, 0};
Expand Down
2 changes: 1 addition & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ endif ()
add_fmt_test(ostream-test)
add_fmt_test(compile-test)
add_fmt_test(printf-test)
add_fmt_test(ranges-test)
add_fmt_test(ranges-test ranges-odr-test.cc)
add_fmt_test(scan-test)
add_fmt_test(unicode-test HEADER_ONLY)
if (MSVC)
Expand Down
19 changes: 19 additions & 0 deletions test/ranges-odr-test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Formatting library for C++ - the core API
//
// Copyright (c) 2012 - present, Victor Zverovich
// All rights reserved.
//
// For the license information refer to format.h.

#include "fmt/ranges.h"

#include <vector>

#include "gtest/gtest.h"

// call fmt::format from another translation unit to test ODR
TEST(ranges_odr_test, format_vector) {
auto v = std::vector<int>{1, 2, 3, 5, 7, 11};
EXPECT_EQ(fmt::format("{}", v), "[1, 2, 3, 5, 7, 11]");
}

0 comments on commit d58d19b

Please sign in to comment.