Linux/GCC でいくつかの CUDA/Thrust コードを試していて、いくつかの TR1 ライブラリを使用したいと思っていましたが、奇妙なことに気付きました: ほとんどのライブラリは常にtr1_impl/type_traits
(4.4) または単にtype_traits
(4.6) を取り込み、そのヘッダーには常に可変長テンプレートが含まれます。 、 そのようです:
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...)>
: public true_type { };
ただし、これらのヘッダーは、GCC を C++98 または C++03 モードで実行するときにも使用されます。これはどのように機能しますか?
私が実際に遭遇した問題は、CUDA ツールチェーンが C++0x 構造を認識せず、cudafe++
(CUDA フロントエンド、つまりジョイント ソース コードをホスト ソース コードとデバイス ソース コードに分離するプログラム) が発生したときにエラーで正しく中止されることです。可変個引数のテンプレート パラメーター。
では、GCC は C++ の非 0x ダイアレクトでどのように variadic テンプレートをサポートし、依存できるのでしょうか? また、TR1 の正規の C++03 バージョンを入手する方法はありますか?