C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

C++11

MSVC++ BUG: C Preprocessor is not capable empty argument

MSVC++(2017; cl.exe-19.11.25547) で C プリプロセッサーのマクロが空の引数を受け付けない C++11/14/17, C99/11 に対する規格違反を報告しました。 https://connect.microsoft.com/VisualStudio/feedback/details/3144014 概要 #define X( X0 ) something …

C++: C プリプロセッサーで定義されるマクロに空のパラメーターを渡す合法性

背景 ソースコード中に大量の少し複雑なアクセサー大量に定義する必要があり、久しぶりに C プリプロセッサーのマクロでアートする機会がありました。マクロを組み上げる上で1つ気になる事が生じました。「マクロに空のパラメーターを渡すのは合法か?」と。…

GCC4.7.1: C++11 と OpenMP のちょっと惜しい関係

C++11から言語仕様のスレッディング周りが強化され、thread、atomic、mutexなどなど言語標準機能として扱える様になり、ちょっとやそっとやそれなりの用途でもintel TBBやBoost.Threadに頼らずにマルチスレッディングソフトウェアを開発し易くなりました。 …

Boost.MultiArray メモ

std::valarrayだと基本的には1次元のデータ構造に対してスライスを考えて多次元要素集合としてアクセスする事になる。Boost.MultiArrayなら基本的には多次元のデータ構造に対して必要ならば1次元のRAWなデータ構造も用いる事ができる。多くの場合は後者の方…

Android NDKを使う前に知っておいた方が良いメモ

執筆時点のAndroid NDK(r19)について。 知って措いた方良い事 JNIのCバインディングとC++バインディングはまったく別物 APIの名前は同じ挙句にC++版でも名前空間つこうて無かったりで、ありがちなC/C++対応と言いつつ実はCっていうパターンかと思いきやC++バ…

CMakeの公式チュートリアルをC++11脳で読み進めるにゃ・w・

cmakeについて漸く自分でも使ってみようと思いチュートリアルをC++11仕様に勝手に脳内変換しながら読むなどしていた。C++11erがcmakeを学習する際に初めに困る事は恐らく「g++にstd=c++11を渡す方法」だと思う。cmakeを習得済みならば困る事は無いはずだが、…

C++11 <thread> GCC 4.6.2 は -pthread 付けないとダメよ

GCC4.6.2ではC++11のが凡そサポート済みという事になっている。ところが簡単なテストコードを書いてビルドしてみると std::system_error 例外がスローされる。whatには"Operation not permitted"。実はビルドする際に -std=c++0x の他に -pthread を付けない…

ブレースによる初期化と初期化リスト

#include <iostream> struct hoge_type{ hoge_type(int){ std::cout<<"A\n"; } hoge_type(std::initializer_list<int>&&){ std::cout<<"B\n"; } }; int main(){ int v = 1; auto a = hoge_type(v); auto b = hoge_type(std::move(v)); auto c = hoge_type{v}; auto d = hoge</int></iostream>…