diff --git a/src/plugins/cppeditor/cppelementevaluator.cpp b/src/plugins/cppeditor/cppelementevaluator.cpp
index 55bae775c56a9de308f5d676344fbe684c899ba5..d3d1b86f7d75fe9f530d3e558e73554f13c1ee26 100644
--- a/src/plugins/cppeditor/cppelementevaluator.cpp
+++ b/src/plugins/cppeditor/cppelementevaluator.cpp
@@ -35,6 +35,7 @@
 #include <coreplugin/ifile.h>
 
 #include <FullySpecifiedType.h>
+#include <Literals.h>
 #include <Names.h>
 #include <CoreTypes.h>
 #include <Scope.h>
@@ -192,8 +193,10 @@ void CppElementEvaluator::handleLookupItemMatch(const Snapshot &snapshot,
             if (m_lookupBaseClasses)
                 cppClass->lookupBases(declaration, context);
             m_element = QSharedPointer<CppElement>(cppClass);
-        } else if (declaration->isEnum() || declaration->enclosingScope()->isEnum()) {
-            m_element = QSharedPointer<CppElement>(new CppEnum(declaration));
+        } else if (Enum *enumDecl = declaration->asEnum()) {
+            m_element = QSharedPointer<CppElement>(new CppEnum(enumDecl));
+        } else if (EnumeratorDeclaration *enumerator = dynamic_cast<EnumeratorDeclaration *>(declaration)) {
+            m_element = QSharedPointer<CppElement>(new CppEnumerator(enumerator));
         } else if (declaration->isTypedef()) {
             m_element = QSharedPointer<CppElement>(new CppTypedef(declaration));
         } else if (declaration->isFunction() || (type.isValid() && type->isFunctionType())) {
@@ -449,18 +452,11 @@ CppFunction::~CppFunction()
 {}
 
 // CppEnum
-CppEnum::CppEnum(Symbol *declaration) : CppDeclarableElement(declaration)
+CppEnum::CppEnum(Enum *declaration)
+    : CppDeclarableElement(declaration)
 {
     setHelpCategory(TextEditor::HelpItem::Enum);
-
-    if (declaration->enclosingScope()->isEnum()) {
-        Symbol *enumSymbol = declaration->enclosingScope()->asEnum();
-        Overview overview;
-        setHelpMark(overview.prettyName(enumSymbol->name()));
-        setTooltip(overview.prettyName(LookupContext::fullyQualifiedName(enumSymbol)));
-    } else {
-        setTooltip(qualifiedName());
-    }
+    setTooltip(qualifiedName());
 }
 
 CppEnum::~CppEnum()
@@ -546,3 +542,31 @@ bool CppTemplate::isFunctionTemplate() const
 {
     return !m_isClassTemplate;
 }
+
+CppEnumerator::CppEnumerator(CPlusPlus::EnumeratorDeclaration *declaration)
+    : CppDeclarableElement(declaration)
+{
+    setHelpCategory(TextEditor::HelpItem::Enum);
+
+    Overview overview;
+
+    Symbol *enumSymbol = declaration->enclosingScope()->asEnum();
+    const QString enumName = overview.prettyName(LookupContext::fullyQualifiedName(enumSymbol));
+    const QString enumeratorName = overview.prettyName(declaration->name());
+    QString enumeratorValue;
+    if (const StringLiteral *value = declaration->constantValue()) {
+        enumeratorValue = QString::fromUtf8(value->chars(), value->size());
+    }
+
+    setHelpMark(overview.prettyName(enumSymbol->name()));
+
+    QString tooltip = enumeratorName;
+    if (!enumName.isEmpty())
+        tooltip.prepend(enumName + QLatin1Char(' '));
+    if (!enumeratorValue.isEmpty())
+        tooltip.append(QLatin1String(" = ") + enumeratorValue);
+    setTooltip(tooltip);
+}
+
+CppEnumerator::~CppEnumerator()
+{}
diff --git a/src/plugins/cppeditor/cppelementevaluator.h b/src/plugins/cppeditor/cppelementevaluator.h
index f0ae6b801b715375575c1a9c5a605d876b21965f..c20c3c0ff932ed87073a0438342917df77a588a3 100644
--- a/src/plugins/cppeditor/cppelementevaluator.h
+++ b/src/plugins/cppeditor/cppelementevaluator.h
@@ -64,7 +64,7 @@ class CppElement;
 class CppElementEvaluator
 {
 public:
-    CppElementEvaluator(CPPEditorWidget *editor);
+    explicit CppElementEvaluator(CPPEditorWidget *editor);
 
     void setTextCursor(const QTextCursor &tc);
     void setLookupBaseClasses(const bool lookup);
@@ -124,7 +124,7 @@ private:
 class Unknown : public CppElement
 {
 public:
-    Unknown(const QString &type);
+    explicit Unknown(const QString &type);
     virtual ~Unknown();
 
     const QString &type() const;
@@ -136,7 +136,7 @@ private:
 class CppInclude : public CppElement
 {
 public:
-    CppInclude(const CPlusPlus::Document::Include &includeFile);
+    explicit CppInclude(const CPlusPlus::Document::Include &includeFile);
     virtual ~CppInclude();
 
     const QString &path() const;
@@ -150,14 +150,14 @@ private:
 class CppMacro : public CppElement
 {
 public:
-    CppMacro(const CPlusPlus::Macro &macro);
+    explicit CppMacro(const CPlusPlus::Macro &macro);
     virtual ~CppMacro();
 };
 
 class CppDeclarableElement : public CppElement
 {
 public:
-    CppDeclarableElement(CPlusPlus::Symbol *declaration);
+    explicit CppDeclarableElement(CPlusPlus::Symbol *declaration);
     virtual ~CppDeclarableElement();
 
     const QString &name() const;
@@ -181,14 +181,14 @@ private:
 class CppNamespace : public CppDeclarableElement
 {
 public:
-    CppNamespace(CPlusPlus::Symbol *declaration);
+    explicit CppNamespace(CPlusPlus::Symbol *declaration);
     virtual ~CppNamespace();
 };
 
 class CppClass : public CppDeclarableElement
 {
 public:
-    CppClass(CPlusPlus::Symbol *declaration);
+    explicit CppClass(CPlusPlus::Symbol *declaration);
     virtual ~CppClass();
 
     void lookupBases(CPlusPlus::Symbol *declaration, const CPlusPlus::LookupContext &context);
@@ -202,21 +202,21 @@ private:
 class CppFunction : public CppDeclarableElement
 {
 public:
-    CppFunction(CPlusPlus::Symbol *declaration);
+    explicit CppFunction(CPlusPlus::Symbol *declaration);
     virtual ~CppFunction();
 };
 
 class CppEnum : public CppDeclarableElement
 {
 public:
-    CppEnum(CPlusPlus::Symbol *declaration);
+    explicit CppEnum(CPlusPlus::Enum *declaration);
     virtual ~CppEnum();
 };
 
 class CppTypedef : public CppDeclarableElement
 {
 public:
-    CppTypedef(CPlusPlus::Symbol *declaration);
+    explicit CppTypedef(CPlusPlus::Symbol *declaration);
     virtual ~CppTypedef();
 };
 
@@ -232,7 +232,7 @@ public:
 class CppTemplate : public CppDeclarableElement
 {
 public:
-    CppTemplate(CPlusPlus::Symbol *declaration);
+    explicit CppTemplate(CPlusPlus::Symbol *declaration);
     virtual ~CppTemplate();
 
     bool isClassTemplate() const;
@@ -242,6 +242,13 @@ private:
     bool m_isClassTemplate;
 };
 
+class CppEnumerator : public CppDeclarableElement
+{
+public:
+    explicit CppEnumerator(CPlusPlus::EnumeratorDeclaration *declaration);
+    virtual ~CppEnumerator();
+};
+
 } // namespace Internal
 } // namespace CppEditor