使用make_shared初始化const成员

时间:2015-07-20 15:43:19

标签: c++ c++11 visual-studio-2013 shared-ptr make-shared

以下代码使用Xcode 6.3.2编译,但不使用Visual Studio 2013编译。

#include <cstdint>
#include <memory>

class Y
{
public:
    Y(uint32_t i) : m_i(i)
    {
    }

private:
    uint32_t m_i;
};

class X
{
public:
    X() = default;

private:
    const uint32_t m_dimension = 2;
    const std::shared_ptr<Y> m_y = std::make_shared<Y>(m_dimension);
};

报告的错误是:

error C2783: 'std::shared_ptr<_Ty> std::make_shared(_Types &&...)' : could not deduce template argument for '_Ty'

这可能是Visual Studio中的编译器错误,还是代码有问题?

2 个答案:

答案 0 :(得分:2)

好像你不是唯一有这个问题的人 - 这个bug已经documented了!较新版本的Visual Studio不应该出现此问题(Visual Studio 2013的更新4似乎是起点)。

答案 1 :(得分:2)

我在VS2013更新4中遇到了同样的问题,并通过将其更新到版本5来解决它。