我正在尝试实现一些模板模板代码,如下所示,它在GCC 7上运行良好,但在Clang 6上无法编译。有什么想法吗?
Driver
编译错误:
df$ID <- ifelse(tour == NA,
yes = #####some function######,
no = tour)
答案 0 :(得分:2)
Clang显然存在以下问题:基本的Operator
结构模板具有3个而非2个参数,因此拒绝在Function
模板内接受它。
根据对这个问题的回答Template template argument causes compiler error under Clang but not GCC Clang是错误的,并且GCC在此问题上符合标准。无论如何,这里是解决此问题的快速方法:
template <template <typename, typename> class Op>
class Function
{
};
template <typename A, typename B, bool is_f = std::is_floating_point<A>::value || std::is_floating_point<B>::value > struct Operator;
template <typename A, typename B>
struct Operator<A, B, false>
{};
template <typename A, typename B>
struct Operator<A, B, true>
{};
template<class A, class B>
using Op = Operator<A, B>;
using FunctionOperator = Function<Op>;
int main(int argc, char * argv[]){
FunctionOperator o;
std::cout << "hi!\n";
return 0;
}
它同时适用于gcc和clang。