为什么以下代码会产生错误:没有可行的构造函数或用于推导'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;
}