#pragma once // ReSharper disable once CppUnusedIncludeDirective #include "global_macros.h" #ifdef CRU_DEBUG #include #include #else #include #include #endif #include #include namespace cru { enum class FlowControl { Continue, Break }; #ifdef CRU_DEBUG using String = std::wstring; #else using String = folly::basic_fbstring; #endif template using Function = folly::Function; template using Action = Function; template using FlowControlAction = Function; #ifdef CRU_DEBUG template using Vector = std::vector; #else template using Vector = folly::fbvector; #endif class Object { public: Object() = default; Object(const Object&) = default; Object& operator = (const Object&) = default; Object(Object&&) = default; Object& operator = (Object&&) = default; virtual ~Object() = default; }; struct Interface { virtual ~Interface() = default; }; [[noreturn]] inline void UnreachableCode() { throw std::logic_error("Unreachable code."); } }