Upgrade to Pro — share decks privately, control downloads, hide ads and more …

nakameguro_feature.cpp vol17 落ち穂拾い:メタ関数編

Cranberries
March 14, 2019
570

nakameguro_feature.cpp vol17 落ち穂拾い:メタ関数編

Cranberries

March 14, 2019
Tweet

Transcript

  1. std::conjuncion std::conjuncion Tips Tips がはじめてfalseとなるとき であるような はそもそもvalueを持たなくて良い B : i

    : value j > i Bj static_assert( std::conjunction_v<std::false_type, std::nullptr_t> ==false);//OK
  2. std::disjunction std::disjunction Tips Tips がはじめてtrueとなるとき であるような はそもそもvalueを持たなくて良い B : i

    : value j > i Bj static_assert( std::disjunction_v<std::true_type, std::nullptr_t> ==true);//OK
  3. is_swappable_with<T,U> is_swappable_with<T,U> usingstd::swap usingstd::swapされたという条件下かつ、 されたという条件下かつ、 未評価な⽂脈で 未評価な⽂脈で swap(declval<T>(),declval<U>()) swap(declval<T>(),declval<U>())と と

    swap(declval<U>(),declval<T>()) swap(declval<U>(),declval<T>())が が ともにwell-formedな式となるかを判定する。 ともにwell-formedな式となるかを判定する。 Preconditions 型TとUが、完全型であること。 もしくは(cv修飾された)voidか、要素数不明の配列型であること。
  4. §23.15.4.3Type §23.15.4.3Type properties/C++17 properties/C++17 inTable42—Typepropertypredicates inTable42—Typepropertypredicates AccesscheckingisperformedasifinacontextunrelatedtoTandU. Onlythevalidityoftheimmediatecontextoftheswapexpressionsis considered. [Note:Thecompilationoftheexpressionscanresultinsideeffectssuch

    astheinstantiationofclasstemplatespecializationsandfunction templatespecializations,thegenerationofimplicitly-definedfunctions, andsoon.Suchsideeffectsarenotinthe immediatecontext andcan resultintheprogrambeingill-formed.—endnote]
  5. SFINAE-friendlyなメタ関数 SFINAE-friendlyなメタ関数 #include<utility> //primarytemplate: template<typename,typename, typename=std::void_t<>> structHasPlusT:std::false_type {};  //partialspecialization(maybeSFINAE

    daway): template<typenameT1,typenameT2> structHasPlusT<T1,T2, std::void_t<decltype(std::declval<T1>() +std::declval<T2>())>> :std::true_type {};