diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index f2c60c57de7e3ceaf0fd9775b41dafde2be37f26..183962f66d4af23407653e411f5b6c6031e186dd 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -439,8 +439,12 @@ bool CheckSpecifier::visit(TypeofSpecifierAST *ast)
 bool CheckSpecifier::visit(AttributeAST *ast)
 {
     if (ast->identifier_token) {
-        if (identifier(ast->identifier_token) == control()->deprecatedId())
+        const Identifier *id = identifier(ast->identifier_token);
+
+        if (id == control()->deprecatedId())
             _fullySpecifiedType.setDeprecated(true);
+        else if (id == control()->unavailableId())
+            _fullySpecifiedType.setUnavailable(true);
     }
     return false;
 }
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index a456bcc20969c6aad6b3932f67917ecca7491ea0..14c07a0f25aaebcc8dee60c9024f2cb451202b10 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -516,6 +516,7 @@ public:
     std::vector<Symbol *> symbols;
 
     const Identifier *deprecatedId;
+    const Identifier *unavailableId;
     // ObjC context keywords:
     const Identifier *objcGetterId;
     const Identifier *objcSetterId;
@@ -532,6 +533,7 @@ Control::Control()
     d = new Data(this);
 
     d->deprecatedId = findOrInsertIdentifier("deprecated");
+    d->unavailableId = findOrInsertIdentifier("unavailable");
 
     d->objcGetterId = findOrInsertIdentifier("getter");
     d->objcSetterId = findOrInsertIdentifier("setter");
@@ -736,6 +738,9 @@ ObjCPropertyDeclaration *Control::newObjCPropertyDeclaration(unsigned sourceLoca
 const Identifier *Control::deprecatedId() const
 { return d->deprecatedId; }
 
+const Identifier *Control::unavailableId() const
+{ return d->unavailableId; }
+
 const Identifier *Control::objcGetterId() const
 { return d->objcGetterId; }
 
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index d46c7093aefad32507aba95215fa27a5695ec8dd..187dc10a0ef4e0161c6c1a6ff72903f1b4c79615 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -177,6 +177,7 @@ public:
     ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, const Name *name);
 
     const Identifier *deprecatedId() const;
+    const Identifier *unavailableId() const;
     // Objective-C specific context keywords.
     const Identifier *objcGetterId() const;
     const Identifier *objcSetterId() const;
diff --git a/src/shared/cplusplus/FullySpecifiedType.cpp b/src/shared/cplusplus/FullySpecifiedType.cpp
index ac49493b50d23d6a1d98e45ee391b539c1520537..da6c16a54a2de19c504bde4590c609c3424ead4a 100644
--- a/src/shared/cplusplus/FullySpecifiedType.cpp
+++ b/src/shared/cplusplus/FullySpecifiedType.cpp
@@ -87,6 +87,7 @@ FullySpecifiedType FullySpecifiedType::qualifiedType() const
     ty.setExplicit(false);
 
     ty.setDeprecated(false);
+    ty.setUnavailable(false);
     return ty;
 }
 
@@ -180,6 +181,12 @@ bool FullySpecifiedType::isDeprecated() const
 void FullySpecifiedType::setDeprecated(bool isDeprecated)
 { f._isDeprecated = isDeprecated; }
 
+bool FullySpecifiedType::isUnavailable() const
+{ return f._isUnavailable; }
+
+void FullySpecifiedType::setUnavailable(bool isUnavailable)
+{ f._isUnavailable = isUnavailable; }
+
 bool FullySpecifiedType::isEqualTo(const FullySpecifiedType &other) const
 {
     if (_flags != other._flags)
diff --git a/src/shared/cplusplus/FullySpecifiedType.h b/src/shared/cplusplus/FullySpecifiedType.h
index df882542dc86ddb8825a3abf92a6727277a4e93f..7905df162de6c95e3977ef0392ff8ca582a66e13 100644
--- a/src/shared/cplusplus/FullySpecifiedType.h
+++ b/src/shared/cplusplus/FullySpecifiedType.h
@@ -113,6 +113,9 @@ public:
     bool isDeprecated() const;
     void setDeprecated(bool isDeprecated);
 
+    bool isUnavailable() const;
+    void setUnavailable(bool isUnavailable);
+
     bool isEqualTo(const FullySpecifiedType &other) const;
 
     Type &operator*();
@@ -158,6 +161,7 @@ private:
 
         // speficiers from attributes
         unsigned _isDeprecated: 1;
+        unsigned _isUnavailable: 1;
     };
     union {
         unsigned _flags;