Date
2014-02-14.19:48:07
Message id
6867

Content

Proposed resolution:

This wording is relative to N3797.

  1. Change [meta.type.synop], header <type_traits> synopsis, as indicated

    namespace std {
      […]
      // 20.10.4.3, type properties:
      […]
      template <class T> struct is_empty;
      template <class T> struct is_polymorphic;
      template <class T> struct is_abstract;
      template <class T> struct is_final;
    
      […]
    }
    
  2. Change [meta.unary.prop], Table 49 — Type property predicates, as indicated

    Table 49 — Type property predicates
    Template Condition Preconditions
    template <class T>
    struct is_abstract;
    […] […]
    template <class T>
    struct is_final;
    T is a class type marked with the class-virt-specifier final ([class]).
    [Note: A union is a class type that can be marked with final. — end note]
    If T is a class type, T shall be a complete type
  3. After [meta.unary.prop] p5 add one further example as indicated:

    [Example:

    // Given:
    struct P final { };
    union U1 { };
    union U2 final { };
    
    // the following assertions hold:
    static_assert(!is_final<int>::value, "Error!");
    static_assert( is_final<P>::value, "Error!");
    static_assert(!is_final<U1>::value, "Error!");
    static_assert( is_final<U2>::value, "Error!");
    

    end example]