用 make_shared 初始化 const 成员
Initialise const member with 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 中的编译器错误还是代码有问题?
看来您不是唯一遇到此问题的人 - 这个错误已 documented! Visual Studio 的较新版本不应该有这个问题(Visual Studio 2013 年的更新 4 似乎是起点)。
我在 VS2013 更新 4 中遇到了同样的问题,并已通过将其更新到版本 5 解决了这个问题。
以下代码使用 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 中的编译器错误还是代码有问题?
看来您不是唯一遇到此问题的人 - 这个错误已 documented! Visual Studio 的较新版本不应该有这个问题(Visual Studio 2013 年的更新 4 似乎是起点)。
我在 VS2013 更新 4 中遇到了同样的问题,并已通过将其更新到版本 5 解决了这个问题。