とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

C++

テンプレートの再帰を無くそう

C++

再帰の欠点 「テンプレートの再帰を無くす」…言うは易く行うは難しだとはいえ、再帰は 遅い 再帰深度に限界がある 恐ろしいエラーメッセージを出す 再帰を消し去る例 再帰を消し去ることに挑戦してみましょう。 T::value が全て true である時に true を返す…

basic_regexの概要を訳してみた

C++

Twitterで@kikairoyaさんに助けてもらいつつ。 @sscrisk この主張がどのような様式で行われるかについては規定されていない とかそんな?— 若年寄(時価) (@kikairoya) 2014, 9月 14 @sscrisk basic_regexはcharTのシーケンスを内部表現に変換するけど、内部表…

GCC 4.9.1がリリースされました

GCC 4.9.1がリリースされました! GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) GCC 4.9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) 変更点は4.9.0からのバ…

括弧初期化リスト(braced-init-list)内では順番に評価される

通常の引数の評価順序 C言語でもC++言語でも関数呼出しのために渡される引数の評価順序は未規定となっています。 #include<stdio.h> void print_sum(int a, int b, int c, int d){ printf("\n%d\n", a + b + c + d); } int main(){ print_sum(printf("%s", "hello"), </stdio.h>…

constexprとrvalue参照問題

C++

constexprとメンバ関数の呼び分け問題 小ネタ - constexpr の文脈でconstメンバ関数と非constメンバ関数を呼び分ける - ボレロ村上 - ENiyGmaA Code このエントリで指摘されているように、constexprとメンバ関数の呼び分け問題があります。一時オブジェクト…

Overloaded Lambdas

C++

自分用に経緯とリンクをまとめ Overloaded Lambdas 元ネタ ブログエントリ C++ Truths: Fun with Lambdas: C++14 Style (part 2) スライド (slideshare) Fun with Lambdas: C++14 Style (part 2) 発展 私が Clang でしか動作せず、GCC ではコンパイルエラー…

GCC 4.9がリリース

C++

GCC 4.9.0 がリリースされました!! GCC 4.9.0 released, full of improved C++11 and C++14 features : Standard C++ GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) GCC 4.9.0 released [2014-04-22] GCC 4.9 Release S…

round half to even

Luaで偶数丸めをしたくなったのでコードを書いてみました。おまけでC++でも書きました。 「偶数丸め」はいろんな別名があるようです。「最近接偶数への丸め」、「最近接丸め」、「JIS丸め」、「ISO丸め」、「銀行家の丸め 」、「銀行型丸め」、「偶捨奇入」…

IS_EMPTYマクロを自作してみた

自作と書いていますが、BOOST_PP_IS_EMPTYのソースを読んでほとんどマネています。また gcc 4.8.2 でのみテストしています。 #define EMPTY() #define DEF_COMMA0 _,1 EMPTY #define COMMA0() ,0 #define TUPLE2_ELEM1_I(f,s) s #define TUPLE2_ELEM1(t) TUP…

オンラインコンパイラ

C++

コードを実際に動かすことのできるオンラインコンパイラを紹介します。少なくともC++に対応しているオンラインコンパイラを紹介しますが、その他の言語・ライブラリ等に対応していたり、複数の処理系に対応しているサービスもあります。 LiveWorkspace (死亡…

Clang 3.4がリリースされました

LLVM 3.4 has been released with full C++1y support : Standard C++ Clang 3.4 での新しいC++1yの対応は以下に書いてあります。 Clang 3.4 Release Notes — Clang 3.4 documentation ジェネリックラムダ 関数の返却値の型推論 constexprの条件緩和 変数テ…

プログラミングの魔導書vol.3を読んだ

株式会社ロングゲート - プログラミングの魔導書 ~Programmers’ Grimoire~ vol.3 25日にはPDF版がダウンロードできるようになり、私もさっそくダウンロードし読みました。 今回は並行・並列がテーマですが、自分の弱点で意図的に避けてきた分野だけに、読…

Boost C++ Libraries 1.55.0 がでました

Boost 1.55 が出ました! Version 1.55.0 古いコンパイラのサポートが切れています。Visual C++であれば、7.1以降がサポートされます。 また、新しいライブラリとしてPredefが入りました。 boostjpにて、有志がリリースノートの翻訳も行いました。こちらも参…

GCC 4.8.2が出ました!

GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) GCC 4.8.2 released [2013-10-16] GCC 4.8 Release Series - GNU Project - Free Software Foundation (FSF) 4.8.1から以下のバグが修正されています。私が報告したICEに…

ドラフトが更新されました

isocpp.org にて、open-std.org に先立ち N3797 が公開されました。 N3797 Working Draft, Standard for Programming Language C++ 正式な規格ではないので注意が必要ですが、最新の情報を得るには必須ですね。

boost::overloaded_functionを使ったオーバーロードって素晴らしいですよね!

オーバーロードって素晴らしいですよね! - ぐるぐる~ このエントリでは、C#において オーバーロードがいらないは完全に言い過ぎですけど、オーバーロードを入れてしまったがために(後から導入した)関数との統一性がなくなってしまっています。 ということ…

Template Meta Programming入門から応用まで

C++

C++勉強会 @ tkb #2 で発表された以下のスライドの内容が非常に濃いものでした。 Template Meta Programming入門から応用まで - ここは匣 知ったこと 113ページ。template<>を付けられるのを知らなかった。今まで普通の関数でオーバーロードしていた。 templ…

C++勉強会 @ tkb #2 が開催されていた

C++

C++勉強会 @ tkb #2 - PARTAKE id:fimbul さんが主宰したようです。 C++勉強会 @ tkb #2 を主宰しました - ここは匣 発表内容(発表順序不明) Template Meta Programming入門から応用まで 発表者:蔵人紗音のじ (fimbul11) Template Meta Programming入門から…

Restricted Words

C++

CodeIQのRestricted Wordsという問題に挑戦しました。 挑戦者求む!【言語指定】Restricted Words by @cielavenir cielavenir│CodeIQ 標準出力に Hello World と出力するプログラムを作成して下さい。 ただし、数値、文字及び文字列リテラルを解答に含めるこ…

C++ ポケットリファレンス

最近読んだ本。いや、最近じゃないけど最近ってことにします。 C++ ポケットリファレンス 普通のC++erは持ってる本。私も普通のC++erになりたかったので4/30に予約してすぐに手に入れました。 内容は最新の情報も含めとても良いものになっています。すべてサ…

literal type

C++

リテラル型(literal type)とは。 規格 C++11 N3337(PDF) 3.9/10 A type is a literal type if it is: — a scalar type; or — a reference type referring to a literal type; or — an array of literal type; or — a class type (Clause 9) that has all of …

std::is_podのバグ

C++

Visual Studio 2012(Visual C++ 11.0)のstd::is_podはバグっている。 再現コード 以下のstatic_assertに失敗してしまう。 (1) void型をPOD型と判定してしまう。 (2) アクセス制御でprotectedあるいはprivateのデータメンバがあるクラスをPOD型ではないと判定…

POD class

C++

PODクラス(POD class)とは。 規格 N3337(PDF) 9/10 A POD struct 109 is a non-union class that is both a trivial class and a standard-layout class, and has no non-static data members of type non-POD struct, non-POD union (or array of such type…

std::is_standard_layoutのバグ

Visual Studio 2012(Visual C++ 11.0)のstd::is_standard_layoutはバグっている。 再現コード 以下の二つのstatic_assertに失敗してしまう。参照型を標準レイアウト型とみなしてしまっている。 #include<type_traits> static_assert(std::is_standard_layout<int&>::value == fa</int&></type_traits>…

standard-layout class

C++

標準レイアウトクラス(standard-layout class)とは。 規格 N3337(PDF) 9/7,8 A standard-layout class is a class that: — has no non-static data members of type non-standard-layout class (or array of such types) or reference, — has no virtual fun…

std::is_trivially_copyableのバグ

Visual Studio 2012(Visual C++ 11.0)のstd::is_trivially_copyableはバグっている。 再現コード 以下の三つのstatic_assertに失敗してしまう。参照型を自明なコピー可能型とみなしてしまっている。さらに、void型を自明なコピー可能型とみなしてしまってい…

std::is_trivialのバグ

Visual Studio 2012(Visual C++ 11.0)のstd::is_trivialはバグっている。 再現コード 以下の二つのstatic_assertで失敗してしまう。参照型を自明型とみなしてしまっている。 #include<type_traits> static_assert(std::is_trivial<int&>::value == false, ""); static_assert(st</int&></type_traits>…

std::is_scalarのバグ

Visual Studio 2012(Visual C++ 11.0)のstd::is_scalarはバグっている。 再現コード #include<type_traits> #include<cstddef> static_assert(std::is_scalar<std::nullptr_t>::value, ""); int main(){} std::nullptr_tはスカラ型(scalar types)なので、static_assertに成功すべきだが失敗してしま</std::nullptr_t></cstddef></type_traits>…

配列型とcv修飾

C++

配列型をcv修飾した場合、その要素型がcv修飾される。 また、要素がcv修飾されている配列型はcv修飾型になる。 この挙動は他の複合型(ポインタ型や参照型など)とは異なるので注意。 コード例 typedef int A[1]; const A a; 要素がcv修飾され、aはconst int […

Visual C++ 2012はメンバ関数のcv修飾でバグがある

Visual Studio 2012(Visual C++ 11.0)はメンバ関数のcv修飾にバグがある。 再現コード 以下のコードをコンパイルするとコンパイルエラーになる。 template<class T> struct s{}; typedef int f() const; s<f> ok; // OK s<int() const> bug; // Compile error, why? int main(){} erro</int()></f></class>…

Visual C++ 2012のis_fundamentalはバグっている

Visual Studio 2012(Visual C++ 11.0)のstd::is_fundamentalはバグっている。 再現コード 以下のコードをコンパイルするとstatic_assertに失敗する。 #include<type_traits> #include<cstddef> static_assert(std::is_fundamental<std::nullptr_t>::value, ""); int main(){} 規格 規格を見るとN333</std::nullptr_t></cstddef></type_traits>…

GCCのバグが修正された

GCCでICE - とくにあぶなくないRiSKのブログで紹介した、gcc 4.8.0, 4.8.1, 4.9.0(20130724)でICEになるバグが早くも修正されました。 4.8.2と、4.9.0の次のビルドでは修正されているはずです。 Bug 57981 – [4.8/4.9 Regression] ICE in this code

GCCでICE

gcc 4.8.0, 4.8.1, 4.9.0(20130724)で以下のコードをコンパイルするとICE(Internal Compiler Error)になる。 template<class T> void f(T t, void* = 0) { } template<class T> auto g(T t) -> decltype(f(t)) { f(t); } int main() { g(0); } [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ B</class></class>…

std::bind, std::mem_fnとメンバへのポインタ

C++

std::bindとstd::mem_fnには、それぞれメンバへのポインタ(メンバ変数へのポインタとメンバ関数へのポインタ)を渡せる。std::bindとstd::mem_fnの呼び出し方が違うので注意。 #include<iostream> #include<functional> struct cls{ int mem_obj; cls(int value):mem_obj(value){} v</functional></iostream>…

非スマートポインタを返す不届き者関数をラップしよう

C++

非スマートポインタ(別名:生ポインタ)を返し、プログラマにstd::freeを書かせるような関数がこの世には存在します。 そのような関数は危なすぎるので、安全かつ楽にどうにかしたいところ。ラップしてみましょう。これでC由来の関数はおおよそラップできそう…

Boost C++ Libraries 1.54.0 がでました。

すでにいたるところでアナウンスされていますが Boost 1.54.0 がでました。 Boost 1.54.0 released! : Standard C++ Version 1.54.0 アキラさん、zakさんによりリリースノートの日本語訳もあります。いつもありがとうございます。 Boost 1.54.0リリースノー…

Sutter’s Mill和訳

C++

Exceptional C++―47のクイズ形式によるプログラム問題と解法 (C++ in‐Depth Series) で有名な Herb Sutter は Sutter’s Mill | Herb Sutter on software, hardware, and concurrency というブログを書いており、C++ の話題を取り上げています。 kumada (seiy…

組込みソフトウェア開発向けコーディング作法ガイド[C++言語版]

C++

IPA 独立行政法人 情報処理推進機構:SEC BOOKS:ESCR C++: 組込みソフトウェア開発向けコーディング作法ガイド[C++言語版][PDF]

GCC 4.8.1 リリース

GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) GCC 4.8.1 released [2013-05-31] GCC 4.8 Release Series - GNU Project - Free Software Foundation (FSF) GCC 4.8 Release Series — Changes, New Features, and Fixes…

GCC 4.8.0 リリース

GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) GCC 4.8.0 released [2013-03-22] GCC 4.8 Release Series - GNU Project - Free Software Foundation (FSF) GCC 4.8 released : Standard C++ 本の虫: GCC 4.8のリリース…

C++ニュース

ニュースといっても新鮮度さがってますし、雑多ですが紹介。 最新のC++を学ぶ - Barbara Moo氏インタビュー Sip from the Firehose : Multi-Device C++ is used everywhere on planet Earth and beyond! C++ REST SDK (codename "Casablanca") - Home Regist…

Ranges implementation?

C++

Ranges implementation? I have (re)implemented a large part of STL using ranges: 「レンジを使ってSTLの大部分を再実装したよー」だそうで。 marcinz/libcxx-ranges · GitHub これによって議論が深まるといいなぁ。find とか rotate とかをどうするのか…

フィーチャーのメーリングリストがオープン

Features Info Page 前回、WG21(C++) の SG9 (Ranges、レンジ)のメーリングリストがオープンしたことを紹介しましたが、SG10 (Features、フィーチャー*1 )のメーリングリストもオープンしてました。興味のある方は参加(ROMも可)してみてはどうでしょう。 *1:…

レンジのメーリングリストがオープン

Standard C++ Ranges Info Page WG21(C++) には 10 の SG がありますが、その一つが SG9 (Ranges、レンジ) です。SG とは Study Group (研究グループ)のことで、このたび、レンジ研究グループのメーリングリストがオープンしたみたいですね。

図で見るC++11の概要とかチートシートとか

C++

C++11チートシート http://dl.dropbox.com/u/13100941/C%2B%2B11.pdf 図で見るC++11の概要 C++11: a visual summary of the additions and changes since C++03 | C++ Rocks 実にシンプルですね(迫真) C++11 STL Additions http://cpprocks.com/wp-content…

in<T> イディオム

C++

C++ Advent Calendar 2012 このエントリは、C++ Advent Calendar 2012 の29日目参加記事です。 「一体いつから ― C++ Advent Calendar 終了だと錯覚していた?」 *1 前日 @zakkas783 雑貨's tumblr - テンプレート・メタプログラム中で文字列を使う では本題…

ジェネリックなラムダ

C++

An implementation of generic lambdas (request for feedback)—Faisal Vali - Standard C++ ジェネリックラムダは C++1y でどうなるか。期待大ですね。 auto Sum = [](auto a, decltype(a) b) { return a + b; }; int i = Sum(3, 4); double d = Sum(3.14, …

ムーブラムダ

C++

問題 C++11のラムダにてコピーキャプチャだとコストが大きすぎる場合にどうしよう? ラムダは直接ムーブキャプチャできないし… 解法 ライブラリで解決。 Capture by Move Lambda - C++11 — Gist auto lambda = create_move_lambda(std::move(obj), [](T para…

C++11 Idioms

C++

問題 こんなデータメンバを持つクラスのコンストラクタをどう書くでしょうか? #include<string> #include<vector> #include<cstddef> class Book { std::string title; std::vector<std::string> authors; std::string pub; std::size_t pub_year; }; C++03では? もう誰も使っていない古のC++03で</std::string></cstddef></vector></string>…

The C++ Programming Language (4th Edition)

プログラミング言語C++第4版(原著)来たる!! C++11対応! stroustrup.com →Stroustrup: The C++ Programming Language (4th Edition) Amazon.com →C++ Programming Language (4th Edition): Bjarne Stroustrup: 9780321563842: Amazon.com: Books Amazon.co…