我正在尝试将一些代码从 to 迁移boost::tuple
,std::tuple
但我遇到了一些奇怪的错误:在我调用using namespace std
(并且从不boost
)之后,我希望一个不合格tie
的解析为std::tie
. 但是,例如,当元组包含 boost 容器指针时,这似乎会失败。
#include <tuple>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/identity.hpp>
#ifdef USE_STD
#define TIE std::tie
#else
#define TIE tie
#endif
typedef boost::multi_index_container<
int,
boost::multi_index::indexed_by<
boost::multi_index::ordered_non_unique<
boost::multi_index::identity<int>
>
>
> Set;
std::tuple< int, int* > make_i_ptr();
std::tuple< int, Set* > make_set();
int main()
{
using namespace std;
int i;
int* i_ptr;
Set* set_ptr;
tie(i, i_ptr) = make_i_ptr();
TIE(i, set_ptr) = make_set();
return 0;
}
如果我用 编译g++ -std=c++0x -c test.cpp -DUSE_STD
,一切都很好。但是,如果没有-D USE_STD
,我会收到编译错误,建议g++
尝试使用boost::tuples::tie
. 我正在使用 g++ 4.8.1 和 boost 1.55.0。你认为这是boost的错误吗?还是我缺少一些规范?