Gcc 为什么叮当作响++;3.5在clang++;3.6你能编译它吗?

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

此代码段无法使用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>
  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