Gcc 为什么叮当作响++;3.5在clang++;3.6你能编译它吗?
此代码段无法使用clang++3.5编译,但可以使用clang++3.6编译。而我搜索,似乎找不到任何关于这个的bug。那么为什么这个代码段不能在clang++3.5中编译呢?g++没有这个问题。先谢谢你Gcc 为什么叮当作响++;3.5在clang++;3.6你能编译它吗?,gcc,g++,clang,llvm,clang++,Gcc,G++,Clang,Llvm,Clang++,此代码段无法使用clang++3.5编译,但可以使用clang++3.6编译。而我搜索,似乎找不到任何关于这个的bug。那么为什么这个代码段不能在clang++3.5中编译呢?g++没有这个问题。先谢谢你 void F() {} template <typename T> class Option { public: Option(const T &) {} Option(T &&) {} template <typename U
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编译器可能无法识别
选项
中与类型void()
匹配的任何构造函数。这可能是由于常量选项不明确造成的
您可能会发现另一个有用的网站:
PS:我想将此作为评论发布,但我不是50代表。但为什么3.6可以识别它?似乎没有任何关于叮当虫网站这一变化的门票。
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