yohhoyの日記

技術的メモをしていきたい日記

MSVC

Visual Studio 11 BetaのVariadic Templatesエセ対応

Visual Studio 11(MSVC11) Betaの可変長引数テンプレート(Variadic Templates)対応*1についてメモ。結論:言語機能としてはサポート一切なし。ただしC++標準ライブラリの一部をマクロでエミュレーション。MSVC12(?)に期待。MSVC11 C++ライブラリの既定では…

Windows APIコールバックでのラムダ式の利用

Visual Studio 11(MSVC11) Betaにおいて、C++11ラムダ式とWindows APIコールバック関数を組み合わせを試したのでメモ。C++11仕様“変数キャプチャを伴わないラムダ式は関数ポインタに変換可能”を利用し、コールバック関数を指定するWindows API関数へラムダ式…

restrictキーワードへの対応状況

C99で導入された restrict キーワード(→id:yohhoy:20120223)への対応状況メモ。 gcc系 gccはC99の restrict キーワードに対応している。また、C++でも利用可能な独自の __restrict__, __restrict キーワードを提供しており*1、C/C++のポインタ型と参照型お…

ローカルクラスとテンプレート引数

C++11から、テンプレート引数として関数内のローカルな型を指定できるようになった。(C++03以前ではNG) template <typename T> void foo(T const& t) {} struct X{}; int main() { struct Y{}; foo(X()); // C++03/C++11:well-formed foo(Y()); // C++03:ill-formed, C</typename>…

printfとsize_t型

C99にてsize_t型用の書式化文字列 長さ修飾子(length modifier)zが追加された。 #include <stdio.h> printf("%zu\n", sizeof(int)); なお、同時にptrdiff_t型用の長さ修飾子tも追加されている。 gcc系 gcc(glibc 2.1以降)はzに対応している。ただし、厳密なC90(-peda</stdio.h>…

asyncについて(実践編)

C++11標準ライブラリのstd::async関数を実際に利用するときの注意点メモ。2012年2月現在の結論: gccのasync関数はプログラマが期待するような賢い動作をしない。 MSVCは問題外(async関数自体をサポートしない)。次期MSVC11に期待。 サードパーティライブ…

futureとpromiseのあれこれ(実践編)

C++11標準ライブラリのstd::future<T>,std::promise<T>を実際に利用するときの注意点メモ。gcc系共通の注意点として、g++オプションに「-std=c++0x -pthread」を指定する必要がある。前者はC++11機能サポートを有効に、後者はスレッド関連機能を有効にするオプショ</t></t>…