/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Library/boost/libs/thread/test/test_13480b.cpp
75 строк
2 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
// comment if you want to see the boost::move issue #define BOOST_THREAD_VERSION 3 #include <boost/type_traits/is_same.hpp> #include <boost/variant/detail/apply_visitor_binary.hpp> #include <boost/variant/static_visitor.hpp> #include <boost/variant/variant.hpp> #include <boost/smart_ptr/shared_ptr.hpp> #define WANT_BUILD_TO_FAIL #ifdef WANT_BUILD_TO_FAIL #include <boost/thread.hpp> #endif class AType { }; class BType { }; typedef boost::shared_ptr<AType> IATypePtr; typedef boost::shared_ptr<BType> IBTypePtr; typedef boost::variant<IATypePtr, IBTypePtr> ABVar; struct ServiceTimeTableEvent { public: ServiceTimeTableEvent(ABVar abType) : m_abType{ abType } {} inline ABVar const& GetABType() const { return m_abType; } inline ABVar & GetABType() { return m_abType; } private: ABVar m_abType; }; class ab_are_equals : public boost::static_visitor<bool> { public: template<typename T, typename U> bool operator()(T, U) const { return false; // cannot compare different types } template<typename T> bool operator()(T lhs, T rhs) const { return lhs == rhs; } }; int main(int argc, char* argv[]) { auto aTypePtr = IATypePtr{ new AType }; auto bTypePtr = IBTypePtr{ new BType }; ABVar aType = aTypePtr; ABVar bType = bTypePtr; ServiceTimeTableEvent timeTableEvent1{ aType }; ServiceTimeTableEvent timeTableEvent2{ bType }; auto xx = boost::apply_visitor(ab_are_equals(), timeTableEvent1.GetABType(), timeTableEvent2.GetABType()); xx = boost::apply_visitor(ab_are_equals(), timeTableEvent1.GetABType(), timeTableEvent1.GetABType());; xx = boost::apply_visitor(ab_are_equals(), timeTableEvent2.GetABType(), timeTableEvent2.GetABType());; }