2023-01-01から1年間の記事一覧
C++2b(C++23)標準ライブラリの多次元ビューstd::mdspanクラステンプレート(→id:yohhoy:20230303)は、第3テンプレートパラメータLayoutPolicyを介して任意のメモリレイアウトをサポートする。*1C++2b標準ライブラリは、多次元配列表現としてメジャーな行優…
C++2b(C++23)標準ライブラリの多次元ビューstd::mdspanクラステンプレート(→id:yohhoy:20230303)では、0次元(rank-0)ビューをサポートする。意味論上は “単一変数へのポインタ” に相当する。(´-`).。oO(使うことあるか?) // C++2b(C++23) #include <cassert> #i</cassert>…
C++2b(C++23)標準ライブラリに追加される多次元ビューstd::mdspanクラステンプレート(→id:yohhoy:20230303)の、コンストラクタと推論ガイド(deduction guide)による実引数クラステンプレート推論(CTAD; Class Template Argument Deduction)のあれこれ。mds…
C++2b(C++23)標準ライブラリに追加される多次元ビューstd::mdspanについて。multidimensional spanの略。 // <mdspan>ヘッダ namespace std { template< class ElementType, class Extents, class LayoutPolicy = layout_right, class AccessorPolicy = default_acce</mdspan>…
C++標準ライブラリのハッシュ計算ファンクタstd::hashを用いてヌル終端文字列のハッシュ計算を行う場合、ポインタ型に対するstd::hash<const char*>特殊化ではなくstd::hash<std::string_view>特殊化を用いる。*1下記コードにあるh0では、“文字列” からではなくアドレス値からハッシュ計算さ</std::string_view></const>…
プログラミング言語C++におけるconstexpr if文とstatic_assert宣言の組合せに関するメモ。2023年2月会合にてstatic_assert(false)を許容するP2593R1がCWG 2518へと統合され*1、C++言語仕様に対するDefect Reportとして遡及適用される。*2CWG 2518適用前のC++…
C++標準ライブラリの直和データ型std::variant<...>と組み合わせて空の状態を表すstd::monostateオブジェクトでは、std::hashによるハッシュ計算がサポートされる。*1各C++処理系で算出されるハッシュ値の一覧(括弧内は併記コメント/定数名): GCC: -7777…
C++ライブラリのクラステンプレート設計で見られる、型テンプレートパラメータへのvoidデフォルト指定に関するメモ。 template<class T = void> class SomeClass; C++2b(C++23)標準ライブラリ時点では、下記パターンでの用法が存在する。 デフォルトvoid型:std::enable_if(</class>…
プログラミング言語C++において、コンパイル時にある変数の宣言型を判定する方法あれこれ。 // 型名T と 変数名val // C++11以降 #include <type_traits> static_assert(std::is_same<T, decltype(val)>::value, ""); // C++17以降 #include <type_traits> static_assert(std::is_same_v<T, decltype(val)>); // C++20以降 #</t,></type_traits></t,></type_traits>…