我得到了下面的代碼,其中自敗,如果我從變種刪除的boost ::空白警告:編譯器警告::變種
namespace DB
{
struct Value{};
struct Container{};
}
typedef boost::variant <boost::blank, DB::Value, DB::Container> CommandData;
struct Command {
explicit Command(CommandData& _data): data(_data){
}
CommandData data;
};
int main()
{
CommandData commandData;
Command command(commandData);
return 0;
}
這是什麼問題?
這裏的警告:
1>: warning C4345: behavior change: an object of POD type constructed with an initializer of the form() will be default-initialized
1> c:\boost_1_49_0\boost\variant\variant.hpp(1224) : while compiling class template member function 'boost::variant<T0_,T1,T2>::variant(void)'
1> with
1> [
1> T0_=boost::blank,
1> T1=DB::Value,
1> T2=DB::Container
1> ]
1> c:\code.h(38) : see reference to class template instantiation 'boost::variant<T0_,T1,T2>' being compiled
1> with
1> [
1> T0_=boost::blank,
1> T1=DB::Value,
1> T2=DB::Container
1> ]
我刪除了代碼中的省略號。它們在C++ 11中有意義,並且在示例中不鼓勵。還請嘗試提供完整的編譯示例代碼,展示您的問題。在你的情況下,編譯代碼是微不足道的,但你應該儘量減少對儘可能回答你問題的人的摩擦。 – pmr
@pmr根據要求更新了問題! – Baz
我什麼都沒要求。只是告訴你如何獲得更好的答案。無論如何,你也可能希望通過'const'採用'_data',或者甚至直接通過'&&'接受一個包含的值,並將其轉發到變體上。 – pmr