2017-06-01から1ヶ月間の記事一覧

C++ で関数引数の評価順序を保証したかった

C++

[関数引数の評価順序] C++では関数を呼び出す際に渡される引数の評価順序は未規定になっています。 どういうことかというと次のようなコードの場合、処理系によって出力される値が異なる可能性があります。 template<typename T> auto print(T value){ std::cout << valu</typename>…

C++ の可変引数リストに non trivial な値を渡すとコンパイルエラーになる

C++

以下のようなコードを Clang でコンパイルしたところエラーになりました。 [](...){}(std::string("homu")); // error: cannot pass object of non-trivial type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') through variadic method; call will abort</char></char,>…

C++17 の std::optional に無効値を設定する

C++

C++17 では Boost.Optional が新しく標準ライブラリ入りしました。 Boost.Optional で無効値を指定する場合は boost::none を使っていたんですが、標準ライブラリの std::optional では std::nullopt を使用して無効値を指定します。 [ソースコード] #includ…

void でキャストすることで "unused" の警告を回避する

元々は C言語?で使われているようなハックらしいのですが、知らなかったので覚書。 さて、例えば次のように関数の引数を assert チェックしてる関数があるとします。 void func(int value){ assert(value == 42); } この場合、デバッグビルドでは問題ないん…

Ruby で任意の異なるクラスのオブジェクトを #uniq するときの注意

元ネタ Rubyむずい…うむむむむむむむうむ[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ https://t.co/buooxLKDHW— 異常者 (@h1manoa) 2017年6月8日 と、いうことでちょっとやってみたら見事にハマったので覚書 元のコード class Hoge def initialize(num) @num = num end d…