模板模板参数中的模板参数过多

时间:2018-07-11 10:17:52

标签: c++ templates

我正在尝试实现一些模板模板代码,如下所示,它在GCC 7上运行良好,但在Clang 6上无法编译。有什么想法吗?

Driver

编译错误:

df$ID <- ifelse(tour == NA, 
                yes = #####some function######, 
                no = tour)

1 个答案:

答案 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。