Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/keyword/typename"

From cppreference.com
< cpp‎ | keyword
m (Text replace - "{{example cpp" to "{{example")
(Usage: CWG 382)
 
(27 intermediate revisions by 10 users not shown)
Line 1: Line 1:
{{cpp/keyword/title|typename}}
+
{{cpp/keyword/title|{{tt|typename}}}}
{{cpp/keyword/sidebar}}
+
{{cpp/keyword/navbar}}
 +
 
 
===Usage===
 
===Usage===
*In a [[cpp/language/template | template declaration]] used to declare templated types
+
* In the template parameter list of a [[cpp/language/templates|template declaration]], {{c|typename}} can be used as an alternative to {{lt|cpp/keyword/class}} to declare {{lsd|cpp/language/template parameters#Type template parameter}}s{{rev inl|since=c++17| and template template parameters}}.
*Inside a template definition, to declare that a static member of a class depending on a template is a type
+
* Inside a declaration or a definition of a template, {{c|typename}} can be used to declare that a [[cpp/language/dependent name|dependent qualified name]] is a type.
===Example===
+
* {{c|typename}} can be used before a non-dependent qualified type name. It has no effect in this case.
{{example|code=
+
{{rrev|since=c++20|
template <typename T>
+
* Inside a [[cpp/language/constraints|requirements]] for type requirements
    void foo ( const std::vector<T>& v )
+
    {
+
        typename std::vector<T>::const_iterator it = v.begin();
+
    }
+
 
}}
 
}}
 +
 +
===See also===
 +
* {{rlpt|class}}
 +
* {{rlpt|template}}
 +
{{rrev|since=c++20|
 +
* {{rlpt|concept}}, {{rlpt|requires}}
 +
}}
 +
 +
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Latest revision as of 04:44, 14 August 2024

 
 
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
 
 

[edit] Usage

  • In the template parameter list of 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.
  • typename can be used before a non-dependent qualified type name. It has no effect in this case.
(since C++20)

[edit] See also

(since C++20)