编译以下代码时,编译器(g++-7
)发出错误:
#include <vector>
template<typename MetricType, typename DataType>
class Label {
public:
using metric_type = Label<MetricType, int>;
template<typename LabelDataType> using label_type = Label<MetricType, LabelDataType>;
// ...
};
template<typename LabelType>
class Raptor {
public:
std::vector<typename LabelType::metric_type> works;
std::vector<typename LabelType::label_type<int> > throws_an_error;
};
int main() {
Raptor<Label<int, int> > raptor;
return 0;
}
错误消息是
main.cpp:17:53: error: template argument 1 is invalid
std::vector<typename LabelType::label_type<int> > throws_an_error;
^
main.cpp:17:53: error: template argument 2 is invalid
make[2]: *** [CMakeFiles/bin.dir/build.make:63: CMakeFiles/bin.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/bin.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
我尝试给std::vector
一个空结构作为第二个模板参数,但是错误消息保持不变。
我不知道此错误消息的含义以及如何编译此代码。
尤其让我感到困惑,因为字段works
不会产生任何错误,而且在注释掉错误的字段时也不会产生任何错误,但是类型metric_type
和label_type<int>
是相等的。