CUDA でコンパイルできないtemplateクラス
テンプレートクラスの中で構造体を typedef すると
nvcc でコンパイルが通りません。
例えば以下のようなコード。
#include <iostream> #include <stdio.h> #include <vector> using namespace std; template<typename T> class Base { public: typedef struct { int start; int end; } Range; std::vector<Range> metaData; Base() { printf("created \n"); } }; int main() { Base<int> b; return 0; }
これをコンパイルすると、以下のようなエラーになります。
ttt.cu:24: error: '__T10' was not declared in this scope ttt.cu:24: error: '__T10' was not declared in this scope ttt.cu:24: error: template argument 1 is invalid ttt.cu:24: error: template argument 1 is invalid ttt.cu:24: error: template argument 2 is invalid
typedef がうまくいかないようです。
nvcc 3.2 と 4.0 で確認しました。
対策としては.....
template クラスの外で typedef することくらいですかね。
2011/08/12 追記
よく考えたら "typedef" 自体がいらなかった。
typedef を外して無事通りました。