为什么Clang无法找到可行的构造函数?

时间:2019-10-31 02:46:17

标签: c++ templates c++17 clang++ template-argument-deduction

为什么以下代码会产生错误:没有可行的构造函数或用于推导'R'模板参数的推导指南

我尝试使用从6.0.0版本开始的所有Clang版本在gcc.godbolt.org上编译此code。它们都产生相同的错误消息。但是,该代码可使用GCC 8.1及更高版本进行编译。这可能是Clang中的错误吗?也许在海湾合作委员会?

使用的编译器选项:-std = c ++ 17 -O2 -Wall -Wextra

#include <functional>

template <typename T>
int fn(T&)
{
    return 0;
}

struct S {};

template <typename T>
struct R
{
    using F = std::function<int(T&)>;

    R(T& _t, F _fn)
        : t_{_t}
        , fn_{_fn}
    {
        fn_(t_);
    }

    T& t_;
    F fn_;
};

int main()
{
    S s;

    // Why does Clang fail on 'fn<S>'?
    // If I wrap 'fn<S>' in curly braces (e.g. {fn<S>}), it works.
    R r{s, fn<S>};

    return 0;
}

0 个答案:

没有答案