##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::is_literal_type

From cppreference.com
< cpp‎ | types

Defined in header `<type_traits>` |  |
template< class T > struct is_literal_type; |  | (since C++11)

If `T` is a literal type, provides the member constant `value` equal true. For any other type, `value` is false.

A literal type is any scalar type, any reference type or a class type that:

1. has a trivial destructor

2. all of its constructor calls and initializers for nonstatic data members are constant expressions

3. is an aggregate type or has at least one constexpr constructor that is not a copy or move constructor

4. all of its nonstatic data members and base classes are literal types

An array of literal types is also a literal type.

## Inherited from std::integral_constant

### Member constants

value [static] | true if `T` is a literal type, false otherwise (public static member constant)

### Member functions

operator bool | converts the object to bool, returns `value` (public member function)

### Member types

Type | Definition
`value_type` | `bool`
`type` | std::integral_constant<bool, value>

### [edit] Notes

Only literal types may be used as parameters to or returned from constexpr functions. Only literal classes may have constexpr member functions.

### [edit] Example

Run this code

    #include <iostream>
    #include <type_traits>

    struct A {
        int m;
    };

    struct B {
        virtual ~B();
    };

    int main()
    {
        std::cout << std::boolalpha;
        std::cout << std::is_literal_type<A>::value << '\n';
        std::cout << std::is_literal_type<B>::value << '\n';
    }

Output:

    true
    false

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/types/is_literal_type&oldid=63033"