std::is_final (3) - Linux Manuals

std::is_final: std::is_final


std::is_final - std::is_final


Defined in header <type_traits>
template< class T > (since C++14)
struct is_final;

If T is a final class (that is, a class declared with the final_specifier), provides the member constant value equal true. For any other type, value is false.
If T is a class type, T shall be a complete type; otherwise, the behavior is undefined.

Template parameters

T - a type to check

Helper variable template

template< class T > (since C++17)
inline constexpr bool is_final_v = is_final<T>::value;

Inherited from std::integral_constant

Member constants

value true if T is a final class type , false otherwise
         (public static member constant)

Member functions

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

operator() returns value
              (public member function)

Member types

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


Final classes cannot be used as base classes.
A union can be marked final (and std::is_final will detect that), even though unions cannot be used as bases in any case.


// Run this code

  #include <iostream>
  #include <type_traits>

  class A {};
  class B final {};

  int main()
          << std::boolalpha
          << std::is_final<A>::value << '\n'
          << std::is_final<B>::value << '\n';



See also

is_class checks if a type is a non-union class type
               (class template)

is_polymorphic checks if a type is a polymorphic class type
               (class template)