小编Nie*_*sen的帖子

转换在Visual Studio 2015中不明确,但与clang不同

以下代码是googlemock项目中的代码的简化版本,无法在Visual Studio 2015 Update 1中编译,但它在clang [Apple LLVM版本7.0.0(clang-700.1.76)]上编译.

struct ConvertibleFromAny
{
    ConvertibleFromAny(int a_value);

    template <typename T>
    ConvertibleFromAny(const T& a_value);
};

template <typename T>
struct Matcher
{
    Matcher(T value);
};

template <typename Rhs>
struct EqMatcher
{
    explicit EqMatcher(const Rhs& rhs);

    template <typename Lhs>
    operator Matcher<Lhs>() const;
};

int main()
{
    EqMatcher<ConvertibleFromAny> em(1);
    Matcher<ConvertibleFromAny> m = em;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误发生在 分配 声明

Matcher<ConvertibleFromAny> m = em;
Run Code Online (Sandbox Code Playgroud)

并且错误消息是

error C2440: 'initializing': cannot convert from 'EqMatcher<ConvertibleFromAny>' to 'Matcher<ConvertibleFromAny>'
note: No constructor could take the …
Run Code Online (Sandbox Code Playgroud)

c++ clang visual-studio-2015

30
推荐指数
2
解决办法
869
查看次数

标签 统计

c++ ×1

clang ×1

visual-studio-2015 ×1