// Copyright Oliver Kowalke 2014. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include class X{ private: int * inp_; std::string outp_; std::exception_ptr excptr_; boost::context::execution_context caller_; boost::context::execution_context callee_; public: X(): inp_( nullptr), outp_(), excptr_(), caller_(boost::context::execution_context::current()), callee_(boost::context::fixedsize_stack(), [=](){ try { int i = * inp_; outp_ = boost::lexical_cast(i); caller_.resume(); } catch (...) { excptr_=std::current_exception(); } }) {} std::string operator()(int i){ inp_ = & i; callee_.resume(); if(excptr_){ std::rethrow_exception(excptr_); } return outp_; } }; int main() { X x; std::cout<