ベクトルを返すキャスト演算子を指定すると、エラー C2664 が発生します。
void foo(const std::vector<std::wstring>& s)
{
}
class Wrapper
{
public:
Wrapper(const std::vector<std::wstring>& s) : m_s(s)
{
}
operator std::vector<std::wstring>() const
{
return m_s;
}
private:
const std::vector<std::wstring> m_s;
};
Wrapper wrapper(std::vector<std::wstring>());
foo(wrapper);
foo(static_cast<std::vector<std::wstring>>(wrapper));
私は得る:
error C2664: '`anonymous-namespace'::foo' : cannot convert parameter 1 from '`anonymous-namespace'::Wrapper (__cdecl *)(std::vector<_Ty> (__cdecl *)(void))' to 'const std::vector<_Ty> &'
with
[
_Ty=std::wstring
]
Reason: cannot convert from 'overloaded-function' to 'const std::vector<_Ty>'
with
[
_Ty=std::wstring
]
No constructor could take the source type, or constructor overload resolution was ambiguous
wstring を使用した同じコードは機能します。
void foo(const std::wstring& s)
{
}
class Wrapper
{
public:
Wrapper(const std::wstring& s) : m_s(s)
{
}
operator std::wstring() const
{
return m_s;
}
private:
const std::wstring m_s;
};
Wrapper wrapper(std::wstring(L"test"));
foo(wrapper);
これは Visual Studio コンパイラのバグですか、それともコンテナーはここで特別なものですか?