C++0xに関するgintenlaboのブックマーク (14)

  • C++0xCompilerSupport - Stdcxx Wiki

    The following table lists C++0x features and their support in popular compilers.

  • multiple_lock_guardとか欲しいよね

    複数のmutexに対するlock_guardが欲しいと思ったので書いてみた。動くかどうかテストしていない。 template < int I > struct unlock { template < typename T > void apply( T & t ) { unlock< I - 1 >::apply( t ) ; std::get<I>(t)->unlock() ; } } ; template <> struct unlock<0> { template < typename T > void apply( T & t ) { std::get<0>(t)->unlock() ; } } ; template < typename ... Types > class multiple_lock_guard { public : typedef std::tuple< Typ

    gintenlabo
    gintenlabo 2011/06/28
    生ポインタではなく std::tuple<std::unique_ptr<Type, unlock<Type>>...> 辺りを使って move 対応(と copy 禁止)をした上で,関数テンプレートで型推論させるべきだと思う.
  • ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee

    2024-02-16: standards | projects | papers | mailings | internals | meetings | contacts News 2024-02-15: The deadline for the 2024-04 mailing is 2024-04-16 16:30 UTC News 2024-02-15: The 2024-02 pre-Tokyo mailing is available (13000 kB tar.gz), individual papers News 2024-01-16: The 2024-01 mailing is available (4000 kB tar.gz), individual papers News 2023-12-22: The C++ Standard Core Issues List (

  • C++0x SFINAE問題の解決 - Faith and Brave - C++で遊ぼう

    以下のコードは、多くのコンパイラでエラーになりますが C++03 ではこれを禁止する規定はありません。 template <int I> struct A {}; char xxx(int); char xxx(float); template <class T> A<sizeof(xxx((T)0))> f(T){} int main() { f(1); } これが問題になる理由は ・実装が難しいから ・名前解決と ABI に影響があるから ・標準でどう規定するかを指摘する必要があったから C++0x では、 decltype や constexpr などの新機能の追加により状況が変わりました。 (このままにしておくと問題がもっと大きくなる) そのため、 SFINAE の扱いを明確にするために、 SFINAE failure ではないエラーを列挙することになりました。 ・式の外部の構成要

    C++0x SFINAE問題の解決 - Faith and Brave - C++で遊ぼう
  • C++0xの言語拡張まとめ(※随時更新) - Faith and Brave - C++で遊ぼう

    C++0xの概要はこちら ・Angle bracket テンプレートの連続した山カッコの問題の解決 ・初期化子リスト ユーザー定義のクラスで配列のような初期化構文を実装可能になる ・Uniform initialization コンストラクタの構文と初期化子リストの構文が一様になる ・デリゲーティング・コンストラクタ コンストラクタから他のコンストラクタを呼び出せる ・auto 型推論 ・記憶クラス指定子としての auto の削除 autoキーワードの意味が変更になるため、下位互換がなくなる ・decltype sizeofの型版 ・Template Aliases テンプレートを使用して型の別名を付けることができる。いわゆるtemplate typedef ・拡張sizeof 構造体/クラスのメンバをインスタンス化せずにsizeofすることが可能になる ・nullptr ヌルポインタを表

    C++0xの言語拡張まとめ(※随時更新) - Faith and Brave - C++で遊ぼう
  • std::functionのtargetの使い方

    こういうことができる。 void f() { std::cout << "f" << std::endl ; } void g() { std::cout << "g" << std::endl ; } int main() { std::function< void ( void ) > func( &f ) ; func() ; // f *func.target< void (*)(void) >() = &g ; func() ; // g } 誰が使うんだろう。 追記:これだけだと、誤解を招きそうなので、以下のコードを補足しておく。 void f() { std::cout << "f" << std::endl ; } void g() { std::cout << "g" << std::endl ; } struct h { void operator ()(void){}

    gintenlabo
    gintenlabo 2010/11/30
    std::shared_ptr の get_deleter みたいなもんかな?
  • unique_ptr C++03 emulation

    Howard E. Hinnant 2009-01-02 unique_ptr Emulation for C++03 Compilers Download header here: unique_ptr.hpp Download header and tests here: unique_ptr.zip unique_ptr is a class template smart pointer currently in the C++0X CD1 draft. It is intended to be a safer and more flexible replacement for auto_ptr. It represents sole (unique) ownership of a resource such as memory (like auto_ptr).

  • C++0xのUnion

    C++0xでは、unionの制限がかなり取り払われたので、こんなことができる。 union U { std::string str ; std::vector<int> vec ; // コンストラクターとデストラクターは、暗黙的にdeleteされているので、 // ユーザー定義が必要。 U() { } ~U() { } } ; int main() { U u ; new ( &u.str ) std::string( "hello" ) ; std::cout << u.str << std::endl ; u.str.~basic_string() ; new ( &u.vec ) std::vector<int> { 1, 2, 3 } ; for ( auto i : u.vec ) { std::cout << i << std::endl ; } u.vec.~vector(

    gintenlabo
    gintenlabo 2010/10/29
    unrestricted unions の話。
  • pre-Batavia mailingの簡易レビュー

    ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee N3139: An Incomplete Language Feature 関数の実引数に、空の初期化リストを渡せない問題の修正。以下のようなコードがwell-formedになる。 struct S { S( std::initializer_list<int> ) ; } ; // デフォルト引数に空の初期化リスト void f( S s = { } ) ; int main() { // 関数の実引数に空の初期化リスト f( { } ) ; } N3140: Cleanup of Pair and tuple C++0xの新機能に対応させようとしたら、std::pairとstd::tupleの文面がだいぶおかしくなってしまったので、これを統一して修正。 N3142: Adjustm

  • 本の虫: C++0xの新しい乱数ライブラリ、random

    注意:最新ドラフトのN3000のrandomの規定は、コンセプトが却下される前の文面であり、今後、変更があると思われる。 C++は標準ライブラリが貧弱であるとは、よく言われることだ。ことに、乱数に関しては、貧弱の極みである。ご存じのように、C++は、Cから標準ライブラリを引き継いでいる。rand()だ。これは、0からRAND_MAXまでの値を返すと規定されている。RAND_MAXは実装によって異なるが、ほとんどの処理系では、32767である。現代の乱数需要を満たすには、あまりにも小さすぎる。 この状況を打破すべく、C++0xには新しい乱数のライブラリが盛り込まれた。randomである。これはBoostの実装を元にしているのだが、Boostとは少し違っている。今回はそのrandomを、浅く触りだけ紹介しようと思う。というのも、ライブラリの細かなメンバ関数の一つ一つまで説明するのは、甚だ冗長で

  • ラムダキャプチャーにはparameter packが使える

    ラムダキャプチャーにはfunction parameter packが使える。もちろん、コピーキャプチャーも参照キャプチャーもできる。 template < typename ... Types > void g( Types ... args ) ; template < typename ... Types > void f( Types ... args ) { // 明示的なキャプチャー [args...]{ g( args... ) ; } ; [&args...]{ g( args... ) ; } ; // 暗黙的なキャプチャー [=]{ g( args... ) ; } ; [&]{ g( args... ) ; } ; } こんなことは、わざわざ説明するまでもないだろうから、いま執筆中のでは書かないつもりであったが、どうも、念のために書いておいた方がいいかもしれない。

  • C++0xの日本語訳ドキュメントまとめ(※随時更新) - Faith and Brave - C++で遊ぼう

    どこに何あるかの管理用エントリ。 翻訳に間違いがあったら教えてください。 SkyDriveの公開フォルダ N1377 C++言語にMove Semanticsのサポートを加える提案(原文)(エントリ) N1385 転送問題:引数(原文)(エントリ) N2027 右辺値参照の簡易入門(原文)(エントリ) N2098 Scoped Concept Maps(原文)(エントリ) N2235 一般化された定数式(原文)(エントリ) N2666 More STL algorithms (revision 2)(原文)(エントリ) N2680 Placement Insertのための提案(Revision 1)(原文)(エントリ) N2778 Working for Range-based for-loop (revision 4)(原文)(エントリ) N2927_New_wording_for_C+

    C++0xの日本語訳ドキュメントまとめ(※随時更新) - Faith and Brave - C++で遊ぼう
  • http://twitter.com/Cryolite/status/16144715759

  • 晴れ時々 C++0x Wiki*

    WIKIは現在仕様策定中の C++0x 言語仕様書の翻訳を、こっそりと堂々行うサイトです。 当WIKI内の内容はあくまでヽ(゚∀。)ノうぇねが私的に行ったものであり、なんら正式に書式化されたものではありません。かなり翻訳として怪しい内容もありますので、基的には原文の補助として参照してください。 また、内容的におかしな場所、言葉、不適切な用語があれば、指摘ください。 現在の作業対象は仕様書草案 N3035 を基準に行っています。 力尽きたら、そっとページを閉じて見なかったことにしてください。 JTC1/SC22/WG21 C++ 標準化作業グループ コメント欄 タイトルは現状 N3000 をベースに作成しています。順次、N3035 に移行します。 -- ヽ(゚∀。)ノうぇね? 2010-03-13 (土) 23:07:43 お、誰か参加してくれている! ありがとうございます。 -- ヽ(

    晴れ時々 C++0x Wiki*
  • 1