Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * \file usage-example.cc
- */
- #include <functional>
- #include <iostream>
- #include <string>
- // \brief Nursling is owned by nursery.
- class Nursling {
- public:
- template<typename Fn, typename ...Args>
- Nursling(Fn&& fn, Args&& ...args) noexcept
- {
- std::cerr << "Nursling()\n";
- }
- ~Nursling(void) {
- std::cerr << "~Nursling()\n";
- }
- };
- #define CACTUS_CONCAT_IMPL(a, b) a##_##b
- #define CACTUS_CONCAT(a, b) CACTUS_CONCAT_IMPL(a, b)
- #if !defined(CACTUS_SALT)
- #define CACTUS_SALT 19a83b68886c9c991c8431ececb31092
- #endif
- #if !defined(CACTUS_PREFIX)
- #define CACTUS_PREFIX CACTUS_CONCAT(cactus_coro, 19a83b68886c9c991c8431ececb31092)
- #endif
- #if !defined(CACTUS_SUFFIX)
- #define CACTUS_SUFFIX CACTUS_CONCAT(__LINE__, __COUNTER__)
- #endif
- #define CACTUS_IDENTIFIER CACTUS_CONCAT(CACTUS_PREFIX, CACTUS_SUFFIX)
- #define CACTUS_GO(var, fn, ...) auto &&var = Nursling(fn, ##__VA_ARGS__)
- #define Go(fn, ...) CACTUS_GO(CACTUS_IDENTIFIER, fn, ##__VA_ARGS__)
- int main() {
- {
- Go([&] () {}, 42, "hello, ", std::string("world!"));
- std::cerr << "somewhere in the middle\n";
- }
- std::cerr << "out of scope\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment