とくにあぶなくない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>…