前回(VC++ 2015のbindとmem_fnは呼出規約付きの関数を扱える)のあと、「そういえばstd::is_functionはどうだっけ?」と思い、試してみました。
次のプログラムで確かめてみたところ、Visual C++ 2013からtrue_typeを返すようになっていました。
#include <type_traits> void __stdcall f(); static_assert(std::is_function<decltype(f)>::value == true, "stdcall"); |
Visual C++ 2010~2012はこのstatic_assertに引っかかってしまいます。2013からは通りました。
ヘッダーファイルを見たところ、2013, 2015ともに<type_traits>からインクルードされている<xstddef>で_NON_MEMBER_CALLや_MEMBER_CALL_CVマクロにより対応していることが分かりました。x64向けに追加された__vectorcallにも対応しているようです。
これも、Boostでは以前から対応していました。Boostとの差異がなくなるという点でもありがたいことです。
スポンサード リンク |