altebute.hatenablog.com

犬も歩けば規格にあたる

C++

cv修飾された仮引数はUniversal Referenceになれない

C++

以下のコードは合法である。 #include <type_traits> #include <iostream> #include <boost/type_index.hpp> using namespace std; using boost::typeindex::type_id_with_cvr; template< typename Arg > void f( Arg&& arg ) { cout << "`Arg` is `" << type_id_with_cvr< Arg >() << "`" << endl; cout <</boost/type_index.hpp></iostream></type_traits>…

参照型に対するcv修飾子はill-formedまたは無視される

C++

const int& は const int への参照であるため、well-formedであるが、 int& const はint&に対するcv修飾であるためill-formedである。 ただし、cv修飾される型名が typedef-name または decltype-specifier の場合、cv修飾子は無視される。 また、同時に ref…

再帰テンプレートを用いた std::tuple の展開と処理

本記事では、std::tupleに対するstd::for_each的な処理を行うためのコードについて記述する。 以下のコードは、規定クラスのポインタの配列に派生クラスのアドレスを代入し、range-based forを用いてメンバ仮想関数をコールしている。 struct Base { virtual…

配列の代わりに std::tuple を使って不要なキャストを避ける

要素を指定したら自動で型を判別しダウンキャストする - 雑記 上記の記事では、基底クラス型のポインタの配列に対して、 任意の添え字に対して静的に型が決っている派生クラスのアドレスを保持し、 テンプレート関数を用いて派生クラスポインタ型のアドレス…