# definitions for C++

include "c_comment.lang"

(keyword,normal,classname) = 
  `(\<(?:enum|class|struct|typename|union))([[:blank:]]+)([[:alnum:]_]+)`

include "c_preprocessor.lang"

include "number.lang"

include "c_string.lang"

keyword = "__asm|__cdecl|__declspec|__export|__far16",
  "__fastcall|__fortran|__import",
  "__pascal|__rtti|__stdcall|_asm|_cdecl",
  "__except|_export|_far16|_fastcall",
  "__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto",
  "break|case|cdecl|const|continue|default",
  "do|else|enum|extern|for|goto",
  "if|pascal",
  "register|restrict|return|sizeof|static",
  "struct|switch",
  "typedef|union",
  "volatile|while",
  "catch|class|const_cast|constexpr|decltype|delete",
  "dynamic_cast|explicit|export|false|final|friend",
  "inline|mutable|namespace|new|noexcept|operator|override",
  "private|protected|public|reinterpret_cast|static_cast",
  "static_assert|template|this|throw|true",
  "try|typeid|typename",
  "using|virtual"

label = '^[[:blank:]]*[[:alnum:]]+:[[:blank:]]*\z'

type = "bool|char|double|float|int|long",
  "short|signed|unsigned|void|wchar_t",
  "char16_t|char32_t"

include "symbols.lang"

cbracket = "{|}"

include "function.lang"

include "clike_vardeclaration.lang"
