Home | History | Annotate | Download | only in Basic
      1 //===--- TemplateKinds.h - Enum values for C++ Template Kinds ---*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 ///
     10 /// \file
     11 /// \brief Defines the clang::TemplateNameKind enum.
     12 ///
     13 //===----------------------------------------------------------------------===//
     14 #ifndef LLVM_CLANG_BASIC_TEMPLATEKINDS_H
     15 #define LLVM_CLANG_BASIC_TEMPLATEKINDS_H
     16 
     17 namespace clang {
     18 
     19 /// \brief Specifies the kind of template name that an identifier refers to.
     20 /// Be careful when changing this: this enumeration is used in diagnostics.
     21 enum TemplateNameKind {
     22   /// The name does not refer to a template.
     23   TNK_Non_template = 0,
     24   /// The name refers to a function template or a set of overloaded
     25   /// functions that includes at least one function template.
     26   TNK_Function_template,
     27   /// The name refers to a template whose specialization produces a
     28   /// type. The template itself could be a class template, template
     29   /// template parameter, or template alias.
     30   TNK_Type_template,
     31   /// The name refers to a variable template whose specialization produces a
     32   /// variable.
     33   TNK_Var_template,
     34   /// The name refers to a dependent template name:
     35   /// \code
     36   /// template<typename MetaFun, typename T1, typename T2> struct apply2 {
     37   ///   typedef typename MetaFun::template apply<T1, T2>::type type;
     38   /// };
     39   /// \endcode
     40   ///
     41   /// Here, "apply" is a dependent template name within the typename
     42   /// specifier in the typedef. "apply" is a nested template, and
     43   /// whether the template name is assumed to refer to a type template or a
     44   /// function template depends on the context in which the template
     45   /// name occurs.
     46   TNK_Dependent_template_name
     47 };
     48 
     49 }
     50 #endif
     51 
     52 
     53