is_trivial function in C++

Trait class that identifies whether T is a trivial type. A trivial type is a type whose storage is contiguous (trivially copyable) and which only supports static default initialization (trivially default constructible), either cv-qualified or not. It includes scalar types, trivial classes and arrays of any such types.

A trivial class is a class (defined with class, struct or union) that is both trivially default constructible and trivially copyable, which implies that:

  • It uses the implicitly defined default, copy and move constructors, copy and move assignments, and destructor.
  • It has no virtual members.
  • It has no non-static data members with brace- or equal- initializers.
  • Its base class and non-static data members (if any) are themselves also trivial types.

is_trivial inherits from integral_constant as being either true_type or false_type, depending on whether T is a trivial type

Syntax :

template  struct is_trivial;


Here A is a class which has been passed as a parameter 
to the function is_trivial and it will return a value of
integral constant type bool i.e. either true or false
// CPP program to illustrate 
// is_trivial function
#include <iostream>
#include <type_traits> //library containing is_trivial function
using namespace std;
class A {};
class B { B() {} };
class C : B {};
class D { virtual void fn() {} };
int main() {
  std::cout << std::boolalpha; //Returns value in boolean type
  std::cout << "A: " << std::is_trivial<A>::value << endl;
  std::cout << "B: " << std::is_trivial<B>::value << endl;
  std::cout << "C: " << std::is_trivial<C>::value << endl;
  std::cout << "D: " << std::is_trivial<D>::value << endl;
  return 0;


A: true
B: false
C: false
D: false

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

This article is attributed to GeeksforGeeks.org

leave a comment



load comments

Subscribe to Our Newsletter