Don't inject internal names into std (#1120)

This commit is contained in:
Victor Zverovich 2019-04-17 12:37:49 -07:00
parent 544b927933
commit d306585a3f
2 changed files with 9 additions and 1 deletions

View File

@ -257,9 +257,12 @@ namespace internal {
#endif
// A fallback implementation of uintptr_t for systems that lack it.
namespace uintptr {
struct uintptr_t {
unsigned char value[sizeof(void*)];
};
}
using uintptr::uintptr_t;
typedef std::numeric_limits<uintptr_t> numutil;
template <typename T> inline bool use_grisu() {
@ -312,7 +315,7 @@ typename Allocator::value_type* allocate(Allocator& alloc, std::size_t n) {
FMT_END_NAMESPACE
namespace std {
using namespace fmt::v5::internal;
using namespace fmt::v5::internal::uintptr;
// Standard permits specialization of std::numeric_limits. This specialization
// is used to detect presence of uintptr_t.
template <>

View File

@ -2540,6 +2540,11 @@ TEST(FormatTest, EmphasisNonHeaderOnly) {
}
TEST(FormatTest, CharTraitsIsNotAmbiguous) {
// Test that we don't inject internal names into the std namespace.
using namespace std;
char_traits<char>::char_type c;
#if __cplusplus >= 201103L
std::string s;
begin(s);
#endif
}