Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/keyword/typename"

From cppreference.com
< cpp‎ | keyword
m (links to casts)
(rv. That's bogus)
Line 1: Line 1:
 
{{cpp/keyword/title|typename}}
 
{{cpp/keyword/title|typename}}
 
{{cpp/keyword/navbar}}
 
{{cpp/keyword/navbar}}
 
The {{c|typename}} keyword is a hint to the compiler that the name following it is a type.  It can also be used as a synonym for {{c|class}} keyword in template parameter lists to emphasize that the template can be passed a built-in type or struct.  In some places the keyword is optional when the compiler can easily infer that the identifier is a type.
 
  
 
===Usage===
 
===Usage===
Line 10: Line 8:
 
* {{rev inl|until=c++11|Inside a declaration or a definition of a template,}} {{c|typename}} can be used before a non-dependent qualified type name. It has no effect in this case.
 
* {{rev inl|until=c++11|Inside a declaration or a definition of a template,}} {{c|typename}} can be used before a non-dependent qualified type name. It has no effect in this case.
 
* Inside a [[cpp/language/constraints | requirements]] for type requirements {{mark since c++20}}
 
* Inside a [[cpp/language/constraints | requirements]] for type requirements {{mark since c++20}}
* The type inside the angle brackets of a {{rlp|static_cast}}, {{rlp|const_cast}}, {{rlp|dynamic_cast}}, or {{rlp|reinterpret_cast}} can use {{c|typename}}
 
* The type named by an operator new expression can use {{c|typename}}
 
 
 
  
 
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}
 
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Revision as of 19:39, 16 May 2020

 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 
 

Usage

  • In a template declaration, typename can be used as an alternative to class to declare type template parameters and template template parameters(since C++17).
  • Inside a declaration or a definition of a template, typename can be used to declare that a dependent qualified name is a type.
  • Inside a declaration or a definition of a template,(until C++11) typename can be used before a non-dependent qualified type name. It has no effect in this case.
  • Inside a requirements for type requirements (since C++20)