此代码段无法使用clang ++ 3.5进行编译,但可以使用clang ++ 3.6进行编译。我搜索https://llvm.org/bugs/,似乎找不到任何关于此的错误。那么为什么这段代码片段无法在clang ++ 3.5中编译? g ++没有这个问题。提前谢谢。
void F() {}
template <typename T>
class Option {
public:
Option(const T &) {}
Option(T &&) {}
template <typename U>
Option(const U &) {}
};
class Fork {
public:
Fork(const Option<void (*)(void)>&) {}
};
int main() {
Fork fork(F);
}
使用clang ++ 3.5编译错误
test.cpp:25:13: error: conversion from 'void ()' to 'const Option<void (*)()>' is ambiguous
Fork fork(F);
^
test.cpp:7:3: note: candidate constructor
Option(const T &) {}
^
test.cpp:9:3: note: candidate constructor
Option(T &&) {}
^
test.cpp:12:3: note: candidate constructor [with U = void ()]
Option(const U &) {}
^
1 error generated.
我的铿锵++版
clang++ --version
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
答案 0 :(得分:0)
clang ++ 3.5编译器可能无法识别Option
中与void ()
匹配的任何构造函数。这可能是因为const Option<void (*)()>
不明确造成的。
您可能会发现有用的其他网站: LLVM Open Source Lib
PS:我想将此作为评论发布,但我不是50代。