C++

C++14標準ライブラリの小さな変更 その2

C++

その1に引き続き、C++14の標準ライブラリに入った、小さな変更を紹介していきます。 weak_ptrがムーブに対応した C++14では、弱参照スマートポインタのstd::weak_ptrクラスに、以下のコンストラクタと、 weak_ptr(weak_ptr&& r) noexcept; template <class Y> weak_pt</class>…

C++14標準ライブラリの小さな変更 その1

C++

C++日本語リファレンスとサイトcpprefjpで、C++14対応を進めているので、このブログですでに紹介した大きな機能以外の、小さな変更点を紹介していきます。 コンテナに挿入するイテレータアダプタに、addressofを使うようになった insert_iteratorのコンスト…

Boost.Fusionのアルゴリズムとジェネリックラムダ

C++

C++14で導入されたジェネリックラムダはBoost.Fusionのためにあるようなものですが、この組み合わせをまだ動かしていなかったので、検証。 #include <iostream> #include <boost/fusion/include/make_vector.hpp> #include <boost/fusion/include/for_each.hpp> int main() { namespace fusion = boost::fusion; fusion::for_each(fusion::make_ve</boost/fusion/include/for_each.hpp></boost/fusion/include/make_vector.hpp></iostream>…

イテレータの受け取り方

C++

以下のコードは、コンパイルエラーになる: template <class Iterator> Iterator f(const Iterator& it) { return it; } int main() { int ar[] = {1, 2, 3}; f(ar); // コンパイルエラー!呼び出し可能なf()のオーバーロードがない } 関数f()はイテレータをconst左辺値参照</class>…

<shared_mutex>ヘッダのリファレンス作成が完了しました

C++

<shared_mutex> - cpprefjp C++のリファレンスサイトcpprefjpでは、C++14への対応も進めています。 今回、C++14での大きなライブラリ追加として、<shared_mutex>ヘッダのリファレンスを作成しました。 cpprefjpサイトのC++14対応状況は、GitHubリポジトリの以下のWikiにまとめてあります</shared_mutex></shared_mutex>…

shared_timed_mutexで並行キューを実装した

C++

Readers Writerロックで、並行キューを実装した。 値を返し、例外を投げないpop()も実装しておいた。 実装: shand/concurrent/queue.hpp インタフェース namespace shand { template <class T> // Tは、例外を投げないムーブコンストラクタを持っていること class co</class>…

boost::optionalのパターンマッチ as 文

C++

boost::optionalを0 or 1要素のRangeと見なす。 #include <memory> #include <boost/optional.hpp> namespace boost { template <class T> T* begin(boost::optional<T>& opt) noexcept { return opt.is_initialized() ? std::addressof(opt.get()) : nullptr; } template <class T> T* end(boost::optional<T>& o</t></class></t></class></boost/optional.hpp></memory>…

boost::optionalをパターンマッチする関数

C++

match function on sum types - std-proposals Vicenteさんが標準向けに提案していた関数を元に、boost::optional用のパターンマッチ関数を作ってみました。 実装 shand/match.hpp shand/type_traits/is_callable.hpp コード例 libs/match/example/match.cpp…

std::beginとstd::endの使い方

C++

コンテナからイテレータを取り出すstd::begin()関数とstd::end()関数は、テンプレート外では名前空間修飾を付けて呼び出す使い方でいいが、テンプレート内で使用する場合は、using宣言した上で名前空間修飾なしに呼び出す必要がある。(std::swap()と同じ) #i…

隣接要素を処理するfor_each

C++

稀によく使うので書いた。const版のみ実装した。 実装: adjacent_for_each.cpp - Gist template <class InputRange, class BinaryFunction> void adjacent_for_each(const InputRange& range, BinaryFunction f) { // for ADL using std::begin; using std::end; auto first = begin(range); auto la</class>…

shared_ptrをweak_ptrに変換するヘルパ関数

C++

実装: shand/to_weak.hpp - GitHub // shand/to_weak.hpp #include <boost/config.hpp> #include <memory> namespace shand { template <class T> std::weak_ptr<T> to_weak(const std::shared_ptr<T>& sp) BOOST_NOEXCEPT { return sp; } C++14から入った、ラムダ式のキャプチャでの初期化で使用する</t></t></class></memory></boost/config.hpp>…

GCC 5.0のC++関係機能

https://gcc.gnu.org/gcc-5/changes.html 網羅的ではなく、気になったものだけ抽出して書いています。 C++11、C++14関係の対応状況は、cpprefjpサイトにもほぼ反映しました。 C++14を全実装 変数テンプレート 宣言時のメンバ初期化を持つ型の集成体初期化を…

STLのイテレータインタフェース再考

C++

STLのイテレータは、コンテナとアルゴリズムをつなぐ中間インタフェース。STLではそのイテレータ自体のインタフェースとして、ポインタの構文を採用している。 ここではそのポインタの構文を、好んで使いたい構文ではないものとし、演算子ではなく名前のつい…

書籍『プログラミング言語C++ 第4版』

C++

プログラミング言語C++第4版 - Amazon.co.jp C++の創始者Bjarne Stroustrupによる『プログラミング言語C++』の第4版、その日本語版が出ます。この版では、C++11への対応が行われています。 SBクリエイティブ社のページはまだないようですが、Amazonでは、201…

C++17の新機能予定

C++

Trip Report: Fall ISO C++ Meeting C++17、およびTechnical Speficicationに採択された提案文書。 コア言語 N4259: Wording for std::uncaught_exceptions (Herb Sutter) 捕捉していない例外の数を取得する関数を追加する。 N4261: Proposed resolution for…

boostjp/cpprefjpサイトを、GitHub Pagesに移行します

C++

これまで、boostjpとcpprefjpの両サイトはGoogle Sites上で運営を行っていましたが、GitHub Pagesに移行しようと思います。 旧サイト (Google Sites): https://sites.google.com/site/boostjp/ http://sites.google.com/site/cpprefjp/ 新サイト (GitHub Pa…

C++忘年会 2014 東京

C++

C++忘年会 2014 東京 - connpass 東京のC++忘年会を12/20(土)に行います!

Effective Modern C++の予約開始

C++

EMC++ Exits Publishing Purgatory! - The View From Aristeia Effective Modern C++ - O'Reilly Effective Modern C++ - Amazon.co.jp Scott Meyersの著書『Effective C++』のC++11とC++14対応である『Effective Modern C++ (略称EMC++)』の予約が開始しま…

書籍『From Mathematics to Generic Programming』

C++

From Mathematics to Generic Programming おもしろそうな本が出るなぁと思ってなんとなく読んでいたら、共著者の一人がAlexander Stepanovでした。STLの設計者です。 そういえば彼の著書である『Elements of Programming (邦訳:プログラミング原論)』もま…

Boost 1.57.0リリース

C++

Version 1.57.0 Boost 1.57.0リリースノート - boostjp Boost 1.57.0がリリースされました。 リリースノートの日本語訳を、boostjpのGitHubリポジトリで公開しています。(boostjpのGoogle Siteには未反映) 今回は大きな変更はありませんが、以下の機能拡張が…

Boost 1.57.0のリリースノート翻訳を開始します

C++

Boost 1.57.0のBetaがリリースされ、本リリースが近づいてきているので、恒例のリリースノート翻訳を開始します。 現在、boostjpサイトは作業環境をGitHubに移行中のため、まだサイトの方に反映はできないのですが、ひとまずboostjp/siteリポジトリにMarkdow…

valarray関係の未規定仕様を報告した

C++

LWG Active Issue List - 2423. Missing specification slice_array, gslice_array, mask_array, indirect_array copy constructor C++11で追加された以下のクラスのコピーコンストラクタの仕様がなかったので、報告しました。 slice_array gslice_array mas…

cpprefjp 次のマイルストーンは正規表現ライブラリ

C++

cpprefjpサイトの次のマイルストーンは、正規表現ライブラリを作成します。 そのマイルストーンを達成するためのタスクリストを、GitHub Issuesとして作ってあります。 正規表現ライブラリの完成 - cpprefjpマイルストーン cpprefjp/siteリポジトリのメンバ…

cpprefjp更新 数値ライブラリ完了

C++

<complex>ヘッダと<valarray>ヘッダのリファレンス作成が完了しました。<complex>は、C++14の仕様にも対応してあります。 これによって、数値ライブラリ全体のリファレンス作成が完了しました。 標準ライブラリ全体としては、全52ヘッダ中、42ヘッダのリファレンス作成が完了しています。</complex></valarray></complex>…

Clang 3.5からはc++14オプション

r215982 - C++1y is now C++14! c++14 - compilers.clang.devel これまでC++14の機能は-std=c++1yオプションで使用できていましたが、Clang 3.5から-std=c++14オプションが追加されます。(Clang 3.5のリリースブランチにマージされている)

Cinder 0.8.6

C++

Cinder 0.8.6 Released Cinder 0.8.6がリリースされた。

C++14の仕様策定が完了しました

C++

We have C++14! - Standard C++ C++14のDIS(Draft International Standard)に対する各国の投票が行われ、満場一致で承認されました。各国から(主に日本から)のコメントによる文面の細かな修正が残っていますが、その作業が完了次第、ISO/IEC 14882:2014(E) P…

C++Now! 2014のセッション概要翻訳が完了しました

C++

C++Now! 2014 - boostjp C++Now! 2014のセッション概要翻訳が完了しました。 C++Now!はBoostの開発者やC++標準化委員会のメンバが多く集まる、C++の最も濃いイベントです。そのセッション内容はどれも有用ですが、その資料全てを翻訳する余裕はありません。 …

Fisher-Yates Shuffle

C++

Fisher-Yates Shuffle – An Algorithm Every Developer Should Know てきとうに抜粋して書く。 以下のシャッフルアルゴリズムは間違っていて、 def incorrect_shuffle(items): for i in range(len(items)): randomIndex = random.randint(0, len(items)-1) t…

Boost.勉強会 #16 大阪

C++

Boost.勉強会 #16 大阪 - Doorkeeper 9月20日(土)に、大阪でBoost.勉強会を開催します。主催は遥佐保さんです。 ひさしぶりの大阪開催ですので、この機会にぜひご参加ください。