Fix warnings in clang for C++11
This commit is contained in:
parent
534da223f7
commit
a6eb15d274
@ -20,6 +20,8 @@ option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
|
|||||||
option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
|
option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
|
||||||
"Use gtest installation in `thirdparty/gtest` by default if available" OFF)
|
"Use gtest installation in `thirdparty/gtest` by default if available" OFF)
|
||||||
|
|
||||||
|
option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11 (gcc/clang)" ON)
|
||||||
|
|
||||||
option(RAPIDJSON_HAS_STDSTRING "" OFF)
|
option(RAPIDJSON_HAS_STDSTRING "" OFF)
|
||||||
if(RAPIDJSON_HAS_STDSTRING)
|
if(RAPIDJSON_HAS_STDSTRING)
|
||||||
add_definitions(-DRAPIDJSON_HAS_STDSTRING)
|
add_definitions(-DRAPIDJSON_HAS_STDSTRING)
|
||||||
@ -27,8 +29,14 @@ endif()
|
|||||||
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror")
|
||||||
|
if (RAPIDJSON_BUILD_CXX11)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
endif()
|
||||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror -Wno-missing-field-initializers")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror -Wno-missing-field-initializers")
|
||||||
|
if (RAPIDJSON_BUILD_CXX11)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
endif()
|
||||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
||||||
endif()
|
endif()
|
||||||
|
@ -11,6 +11,7 @@ using namespace rapidjson;
|
|||||||
class Person {
|
class Person {
|
||||||
public:
|
public:
|
||||||
Person(const std::string& name, unsigned age) : name_(name), age_(age) {}
|
Person(const std::string& name, unsigned age) : name_(name), age_(age) {}
|
||||||
|
Person(const Person& rhs) : name_(rhs.name_), age_(rhs.age_) {}
|
||||||
virtual ~Person();
|
virtual ~Person();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -38,6 +39,7 @@ Person::~Person() {
|
|||||||
class Education {
|
class Education {
|
||||||
public:
|
public:
|
||||||
Education(const std::string& school, double GPA) : school_(school), GPA_(GPA) {}
|
Education(const std::string& school, double GPA) : school_(school), GPA_(GPA) {}
|
||||||
|
Education(const Education& rhs) : school_(rhs.school_), GPA_(rhs.GPA_) {}
|
||||||
|
|
||||||
template <typename Writer>
|
template <typename Writer>
|
||||||
void Serialize(Writer& writer) const {
|
void Serialize(Writer& writer) const {
|
||||||
@ -102,6 +104,7 @@ Dependent::~Dependent() {
|
|||||||
class Employee : public Person {
|
class Employee : public Person {
|
||||||
public:
|
public:
|
||||||
Employee(const std::string& name, unsigned age, bool married) : Person(name, age), dependents_(), married_(married) {}
|
Employee(const std::string& name, unsigned age, bool married) : Person(name, age), dependents_(), married_(married) {}
|
||||||
|
Employee(const Employee& rhs) : Person(rhs), dependents_(rhs.dependents_), married_(rhs.married_) {}
|
||||||
virtual ~Employee();
|
virtual ~Employee();
|
||||||
|
|
||||||
void AddDependent(const Dependent& dependent) {
|
void AddDependent(const Dependent& dependent) {
|
||||||
|
@ -31,6 +31,7 @@ RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
|||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(padded)
|
RAPIDJSON_DIAG_OFF(padded)
|
||||||
RAPIDJSON_DIAG_OFF(switch-enum)
|
RAPIDJSON_DIAG_OFF(switch-enum)
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -141,6 +142,7 @@ public:
|
|||||||
Otherwise, the copy constructor is implicitly defined.
|
Otherwise, the copy constructor is implicitly defined.
|
||||||
*/
|
*/
|
||||||
GenericMemberIterator(const NonConstIterator & it) : ptr_(it.ptr_) {}
|
GenericMemberIterator(const NonConstIterator & it) : ptr_(it.ptr_) {}
|
||||||
|
Iterator& operator=(const NonConstIterator & it) { ptr_ = it.ptr_; return *this; }
|
||||||
|
|
||||||
//! @name stepping
|
//! @name stepping
|
||||||
//@{
|
//@{
|
||||||
@ -314,8 +316,6 @@ struct GenericStringRef {
|
|||||||
const SizeType length; //!< length of the string (excluding the trailing NULL terminator)
|
const SizeType length; //!< length of the string (excluding the trailing NULL terminator)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Disallow copy-assignment
|
|
||||||
GenericStringRef operator=(const GenericStringRef&);
|
|
||||||
//! Disallow construction from non-const array
|
//! Disallow construction from non-const array
|
||||||
template<SizeType N>
|
template<SizeType N>
|
||||||
GenericStringRef(CharType (&str)[N]) /* = delete */;
|
GenericStringRef(CharType (&str)[N]) /* = delete */;
|
||||||
|
@ -18,6 +18,11 @@
|
|||||||
#include "../rapidjson.h"
|
#include "../rapidjson.h"
|
||||||
#include "swap.h"
|
#include "swap.h"
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
@ -203,4 +208,8 @@ private:
|
|||||||
} // namespace internal
|
} // namespace internal
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RAPIDJSON_STACK_H_
|
#endif // RAPIDJSON_STACK_H_
|
||||||
|
@ -17,6 +17,11 @@
|
|||||||
|
|
||||||
#include "../rapidjson.h"
|
#include "../rapidjson.h"
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
@ -34,4 +39,8 @@ inline void Swap(T& a, T& b) RAPIDJSON_NOEXCEPT {
|
|||||||
} // namespace internal
|
} // namespace internal
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RAPIDJSON_INTERNAL_SWAP_H_
|
#endif // RAPIDJSON_INTERNAL_SWAP_H_
|
||||||
|
@ -23,6 +23,11 @@
|
|||||||
|
|
||||||
#include "internal/stack.h"
|
#include "internal/stack.h"
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
//! Represents an in-memory output stream.
|
//! Represents an in-memory output stream.
|
||||||
@ -103,4 +108,8 @@ inline void PutN(GenericStringBuffer<UTF8<> >& stream, char c, size_t n) {
|
|||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RAPIDJSON_STRINGBUFFER_H_
|
#endif // RAPIDJSON_STRINGBUFFER_H_
|
||||||
|
@ -21,6 +21,12 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
RAPIDJSON_DIAG_OFF(missing-variable-declarations)
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace rapidjson;
|
using namespace rapidjson;
|
||||||
|
|
||||||
template <typename DocumentType>
|
template <typename DocumentType>
|
||||||
@ -573,3 +579,7 @@ TYPED_TEST(DocumentMove, MoveAssignmentStack) {
|
|||||||
// Document d2;
|
// Document d2;
|
||||||
// d1 = d2;
|
// d1 = d2;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
@ -31,6 +31,7 @@ RAPIDJSON_DIAG_OFF(missing-noreturn)
|
|||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(variadic-macros)
|
RAPIDJSON_DIAG_OFF(variadic-macros)
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat-pedantic)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template<bool expect>
|
template<bool expect>
|
||||||
|
@ -16,6 +16,11 @@
|
|||||||
#include "rapidjson/stringbuffer.h"
|
#include "rapidjson/stringbuffer.h"
|
||||||
#include "rapidjson/writer.h"
|
#include "rapidjson/writer.h"
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace rapidjson;
|
using namespace rapidjson;
|
||||||
|
|
||||||
TEST(StringBuffer, InitialSize) {
|
TEST(StringBuffer, InitialSize) {
|
||||||
@ -148,3 +153,7 @@ TEST(StringBuffer, MoveAssignment) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
@ -15,8 +15,19 @@
|
|||||||
#include "unittest.h"
|
#include "unittest.h"
|
||||||
#include "rapidjson/rapidjson.h"
|
#include "rapidjson/rapidjson.h"
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#if __has_warning("-Wdeprecated")
|
||||||
|
#pragma GCC diagnostic ignored "-Wdeprecated"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
AssertException::~AssertException() throw() {}
|
AssertException::~AssertException() throw() {}
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
::testing::InitGoogleTest(&argc, argv);
|
::testing::InitGoogleTest(&argc, argv);
|
||||||
|
|
||||||
|
@ -99,12 +99,24 @@ inline FILE* TempFile(char *filename) {
|
|||||||
#pragma warning(disable : 4127)
|
#pragma warning(disable : 4127)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#if __has_warning("-Wdeprecated")
|
||||||
|
#pragma GCC diagnostic ignored "-Wdeprecated"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
class AssertException : public std::logic_error {
|
class AssertException : public std::logic_error {
|
||||||
public:
|
public:
|
||||||
AssertException(const char* w) : std::logic_error(w) {}
|
AssertException(const char* w) : std::logic_error(w) {}
|
||||||
|
AssertException(const AssertException& rhs) : std::logic_error(rhs) {}
|
||||||
virtual ~AssertException() throw();
|
virtual ~AssertException() throw();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
#define RAPIDJSON_ASSERT(x) if (!(x)) throw AssertException(RAPIDJSON_STRINGIFY(x))
|
#define RAPIDJSON_ASSERT(x) if (!(x)) throw AssertException(RAPIDJSON_STRINGIFY(x))
|
||||||
|
|
||||||
class Random {
|
class Random {
|
||||||
|
@ -16,6 +16,11 @@
|
|||||||
#include "rapidjson/document.h"
|
#include "rapidjson/document.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace rapidjson;
|
using namespace rapidjson;
|
||||||
|
|
||||||
TEST(Value, DefaultConstructor) {
|
TEST(Value, DefaultConstructor) {
|
||||||
@ -764,15 +769,15 @@ TEST(Value, Array) {
|
|||||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
// PushBack(GenericValue&&, Allocator&);
|
// PushBack(GenericValue&&, Allocator&);
|
||||||
{
|
{
|
||||||
Value y(kArrayType);
|
Value y2(kArrayType);
|
||||||
y.PushBack(Value(true), allocator);
|
y2.PushBack(Value(true), allocator);
|
||||||
y.PushBack(std::move(Value(kArrayType).PushBack(Value(1), allocator).PushBack("foo", allocator)), allocator);
|
y2.PushBack(std::move(Value(kArrayType).PushBack(Value(1), allocator).PushBack("foo", allocator)), allocator);
|
||||||
EXPECT_EQ(2u, y.Size());
|
EXPECT_EQ(2u, y2.Size());
|
||||||
EXPECT_TRUE(y[0].IsTrue());
|
EXPECT_TRUE(y2[0].IsTrue());
|
||||||
EXPECT_TRUE(y[1].IsArray());
|
EXPECT_TRUE(y2[1].IsArray());
|
||||||
EXPECT_EQ(2u, y[1].Size());
|
EXPECT_EQ(2u, y2[1].Size());
|
||||||
EXPECT_TRUE(y[1][0].IsInt());
|
EXPECT_TRUE(y2[1][0].IsInt());
|
||||||
EXPECT_TRUE(y[1][1].IsString());
|
EXPECT_TRUE(y2[1][1].IsString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1354,3 +1359,27 @@ TEST(Value, AcceptTerminationByHandler) {
|
|||||||
TEST_TERMINATION(11, "{\"a\":[]}");
|
TEST_TERMINATION(11, "{\"a\":[]}");
|
||||||
TEST_TERMINATION(12, "{\"a\":[]}");
|
TEST_TERMINATION(12, "{\"a\":[]}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ValueIntComparer {
|
||||||
|
bool operator()(const Value& lhs, const Value& rhs) const {
|
||||||
|
return lhs.GetInt() < rhs.GetInt();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
TEST(Value, Sorting) {
|
||||||
|
Value::AllocatorType allocator;
|
||||||
|
Value a(kArrayType);
|
||||||
|
a.PushBack(5, allocator);
|
||||||
|
a.PushBack(1, allocator);
|
||||||
|
a.PushBack(3, allocator);
|
||||||
|
std::sort(a.Begin(), a.End(), ValueIntComparer());
|
||||||
|
EXPECT_EQ(1, a[0].GetInt());
|
||||||
|
EXPECT_EQ(3, a[1].GetInt());
|
||||||
|
EXPECT_EQ(5, a[2].GetInt());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user