diff --git a/src/libs/3rdparty/cplusplus/CoreTypes.cpp b/src/libs/3rdparty/cplusplus/CoreTypes.cpp index 0561f660584..4519eabc036 100644 --- a/src/libs/3rdparty/cplusplus/CoreTypes.cpp +++ b/src/libs/3rdparty/cplusplus/CoreTypes.cpp @@ -21,10 +21,11 @@ #include "CoreTypes.h" #include "TypeVisitor.h" #include "Matcher.h" -#include "Names.h" #include -using namespace CPlusPlus; +namespace CPlusPlus { + +UndefinedType UndefinedType::instance; void UndefinedType::accept0(TypeVisitor *visitor) { visitor->visit(this); } @@ -204,3 +205,5 @@ bool NamedType::match0(const Type *otherType, Matcher *matcher) const return false; } + +} // CPlusPlus diff --git a/src/libs/3rdparty/cplusplus/CoreTypes.h b/src/libs/3rdparty/cplusplus/CoreTypes.h index 0db1dd81837..5f2c30e89c6 100644 --- a/src/libs/3rdparty/cplusplus/CoreTypes.h +++ b/src/libs/3rdparty/cplusplus/CoreTypes.h @@ -29,11 +29,7 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT UndefinedType : public Type { public: - static UndefinedType *instance() - { - static UndefinedType t; - return &t; - } + static UndefinedType instance; const UndefinedType *asUndefinedType() const override { return this; } diff --git a/src/libs/3rdparty/cplusplus/FullySpecifiedType.cpp b/src/libs/3rdparty/cplusplus/FullySpecifiedType.cpp index 7333f306296..27be623821b 100644 --- a/src/libs/3rdparty/cplusplus/FullySpecifiedType.cpp +++ b/src/libs/3rdparty/cplusplus/FullySpecifiedType.cpp @@ -26,15 +26,19 @@ using namespace CPlusPlus; +FullySpecifiedType::FullySpecifiedType() : + _type(&UndefinedType::instance), _flags(0) +{} + FullySpecifiedType::FullySpecifiedType(Type *type) : _type(type), _flags(0) { if (! type) - _type = UndefinedType::instance(); + _type = &UndefinedType::instance; } bool FullySpecifiedType::isValid() const -{ return _type != UndefinedType::instance(); } +{ return _type != &UndefinedType::instance; } FullySpecifiedType FullySpecifiedType::qualifiedType() const @@ -170,7 +174,7 @@ Type &FullySpecifiedType::operator*() { return *_type; } FullySpecifiedType::operator bool() const -{ return _type != UndefinedType::instance(); } +{ return _type != &UndefinedType::instance; } const Type &FullySpecifiedType::operator*() const { return *_type; } diff --git a/src/libs/3rdparty/cplusplus/FullySpecifiedType.h b/src/libs/3rdparty/cplusplus/FullySpecifiedType.h index ec54b8bdd98..03f82b788ea 100644 --- a/src/libs/3rdparty/cplusplus/FullySpecifiedType.h +++ b/src/libs/3rdparty/cplusplus/FullySpecifiedType.h @@ -28,7 +28,8 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT FullySpecifiedType final { public: - FullySpecifiedType(Type *type = nullptr); + FullySpecifiedType(); + FullySpecifiedType(Type *type); ~FullySpecifiedType() = default; bool isValid() const; diff --git a/src/libs/3rdparty/cplusplus/Type.cpp b/src/libs/3rdparty/cplusplus/Type.cpp index e9b0f2d3c17..00e84b0a61c 100644 --- a/src/libs/3rdparty/cplusplus/Type.cpp +++ b/src/libs/3rdparty/cplusplus/Type.cpp @@ -33,7 +33,7 @@ Type::~Type() { } bool Type::isUndefinedType() const -{ return this == UndefinedType::instance(); } +{ return this == &UndefinedType::instance; } bool Type::isVoidType() const { return asVoidType() != nullptr; }