2371. [fund.ts] No template aliases defined for new type traits

Section: 3.3.1 [fund.ts::meta.type.synop] Status: TS Submitter: Joe Gottman Opened: 2014-03-07 Last modified: 2017-07-30

Priority: 0

View all issues with TS status.

Discussion:

Addresses: fund.ts

The library fundamentals specification defines two new type trait template classes: invocation_type and raw_invocation_type. But it does not define the corresponding template aliases. Note that both of these classes define a member typedef type and no other public members, so according to the argument in N3887 the template aliases should be defined.

[2013-06-21 Rapperswil]

Accept for Library Fundamentals TS Working Paper

Proposed resolution:

This wording is relative to N3908.

  1. Add the following to section 3.3.1[meta.type.synop] of the Library Fundamentals specification as indicated:

    namespace std {
    namespace experimental {
    inline namespace fundamentals_v1 {
      […]
      // 3.3.2, Other type transformations
      template <class> class invocation_type; // not defined
      template <class F, class... ArgTypes> class invocation_type<F(ArgTypes...)>;
      template <class> class raw_invocation_type; // not defined
      template <class F, class... ArgTypes> class raw_invocation_type<F(ArgTypes...)>;
      
      template <class T> 
        using invocation_type_t = typename invocation_type<T>::type;
      template <class T> 
        using raw_invocation_type_t = typename raw_invocation_type<T>::type;
      
    } // namespace fundamentals_v1
    } // namespace experimental
    } // namespace std