タグ

C++1yと2012に関するUSAGI-WRPのブックマーク (4)

  • C++1y static if - Faith and Brave - C++で遊ぼう

    C++1yでは、D言語にもあるstatic ifが提案されています。 宣言と文が現れるあらゆるところで使えるようにしよう、ということで考えられいて、ユースケースもいろいろ考えられています。 まず、コンパイル時条件によって処理を呼び分ける基的な用途。 以下の、コンパイル時条件で分岐するような処理は、これまで関数オーバーロードでやっていました。 static if (sizeof(size_t) == 8) { // 64ビット版のコンパイルではこっち void fun(); } else { void gun(); } 次に、クラスの定数/型定義。 以下の階乗のような例は、これまで特殊化でやっていました。 template <unsigned long n> struct factorial { static if (n <= 1) { enum : unsigned long { val

    C++1y static if - Faith and Brave - C++で遊ぼう
  • 2012-10-25

    C++1yでは、boost::optionalをベースとしたクラスが提案されています(元々TR2で導入しようと考えられていた)。提案者は、Boost.Optional作者のFernando Cacciolaさん。 このクラスは、intだったら-1を無効値とし、ポインタだったらNULLを…といったプロジェクトの決め事による無効値ではなく、型で無効値を表現するのに使用します。 optional<int> x = 3; // 有効値を代入 x = nullopt; // 無効値にする この提案でのboost::optionalとの相違点は、大きなところでは以下になります: 無効値はnullopt。Boostはnone。 constexpr対応 入出力ストリームの演算子を提供しない emplaceによる構築。Boostではin_place()関数。 入出力ストリームを提供しないのは、現状その振る舞

    2012-10-25
    USAGI-WRP
    USAGI-WRP 2012/10/25
    [boost::optional][maybe monad][Faith and Brave]
  • 2012-10-15

    C++11では、ユーザー定義リテラルという、リテラル値に対して型付けするための機能が導入されました。C++11時点では、標準ライブラリでユーザーリテラルは使われてはいません。 C++1yでは、標準でいくつかのユーザー定義リテラルを提供する提案が出ています。 代表的なところでは、時間ライブラリのChronoがあります。このライブラリは、時間の間隔を表すseconds, millisecondsといった型が用意されているので、以下のようにして値を型付けできます: template <class Duration> void f(Duration d) {} seconds s(3); // 3秒 // 関数に渡す f(seconds(2)); // 2秒 f(milliseconds(3)); // 3ミリ秒 この提案では、std::suffixes::chrono名前空間に、Chronoライ

    2012-10-15
  • 2012-09 pre-Portland mailingのあまり簡易ではないレビュー

    2012-09 pre-Portland mailingが公開された。久しぶりなのですっかり忘れていた。今回はやたらと多い。もちろん、もはや正式規格発行後なので、差し迫った変更はない。細部の疑わしい文面の変更とか、大雑把な提案とか、将来C++への追加の可能性のある機能が、現状ではどのように独自な拡張やライブラリで実装されているのかなどの紹介といったところだ。今回は、紹介も非常に多く、規格への提案というよりも、C++11でライブラリはどのようになるかといった紹介が多いように思う。 とにかく今回は数が多い。疲れた。非常に疲れた。無償でやるのも不毛だ。 C++11は、2000年中に制定されることが期待されていたので、だいぶ最近までC++0xと呼ばれていた。C++0xという呼称を最初に使ったのは他ならぬBjarne Stroustrupだが、次の規格の呼称もすでに生まれている。C++1yという。現

    2012-09 pre-Portland mailingのあまり簡易ではないレビュー
  • 1