2011-03-01から1ヶ月間の記事一覧

gcc-4.6.0 コンパイル通ったよ!

以下、テストコード: #include <vector> #include <memory> // for std::unique_ptr // implicit move struct X { X() = default; X( std::vector<int> src ) : p( new auto( std::move(src) ) ) {} // X( X&& ) = default; // noexcept-specification int* begin() noexcept(tru</int></memory></vector>…

gcc-4.6.0 がリリースされた

gcc の最新版 4.6.0 がリリースされたようです: http://gcc.gnu.org/gcc-4.6/ 気になる C++0x サポートですが、 g++ 4.6.0 では、新たに nullptr range-based for constexpr noexcept implicit move 等が追加されたようです。 http://gcc.gnu.org/projects/…

Boost.Optional Must Go (3)

関連記事: http://d.hatena.ne.jp/gintenlabo/20100531/1275335373 http://d.hatena.ne.jp/gintenlabo/20100602/1275505739 結論から言います。 以前の記事において、参照に対する Boost.Optional は、生ポインタの代替として使える、と書きましたが、 現状…

rvalue reference の不満点

C++0x には rvalue reference という機能があります。 これは「一時オブジェクトへの参照」を扱うものであり、 struct X { std::string s; // 一時オブジェクトが渡された場合、 s_ は自由に変更できる // なので、 s_ の中身を「移動」して s を初期化する …

Inheriting Constructors を Variadic Templates でエミュレートする

C++0x の規格制定において、 Inheriting Constructors を見直す提案がなされたようです: 本の虫: pre-Madrid mailingの簡易レビュー 曰く、 Inheriting Constructors (以下、 Constructor を Ctor と略記)は、 Variadic Templates でエミュレート可能であ…

Variadic Templates を SFINAE 用のダミー引数として使う

C++ では、ある関数に渡された引数の種類によって、実際に行う処理を切り替えたい時には、 #include <type_traits> template< class T, class = typename std::enable_if< std::is_integral<T>::value >::type > void f( T const& x ) { // T が整数型の場合 } template< cla</t></type_traits>…

関数テンプレートに対するデフォルトテンプレート引数の使い方

この記事は、新しい使い道が発見され次第、随時更新していく予定です。 はじめに C++0x では、関数テンプレートに対し、デフォルトのテンプレート引数を渡すことが出来るようになりました: http://d.hatena.ne.jp/faith_and_brave/20071105/1194259443 // …