As a Variable:
- it must be immediately constructed or assigned a value.
- the constructor parameters or the value to be assigned must contain only literal values,
constexpr
variables and functions.
- the constructor used to construct the object (either implicit or explicit) must satisfy the requirements of
constexpr
constructor. In the case of explicit constructor, it must have constexpr specified.
As a Function:
- it must not be virtual
- its return type must be
LiteralType
- each of its parameters must be literal type
- the function body must be either deleted or defaulted or contain only the following:
- null statements
static_assert
declarationstypedef
declarations and alias declarations that do not define classes or enumerations- using declarations
- using directives
- exactly one
return
statement that contains only literal values,constexpr
variables and functions.
As a Constructor:- each of its parameters must be literal type
- the class must have no virtual base classes
- the constructor body must be either deleted or defaulted or contain only the following:
- null statements
static_assert
declarationstypedef
declarations and alias declarations that do not define classes or enumerations- using declarations
- using directives
- the constructor must not have a function-try block
- every base class and every non-static member must be initialized, either in the
initializer_list
or by brace-or-equal initializer. In addition, every constructor involved must be a constexpr constructor and every clause of every brace-or-equal initializer must be a constant expression - every implicit conversion involved must be a constant expression
See the below papaer for more information:
No comments:
Post a Comment