diff options
Diffstat (limited to 'extra/guile/scm/detail/util.hpp')
-rw-r--r-- | extra/guile/scm/detail/util.hpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/extra/guile/scm/detail/util.hpp b/extra/guile/scm/detail/util.hpp new file mode 100644 index 000000000000..fdc323722e99 --- /dev/null +++ b/extra/guile/scm/detail/util.hpp @@ -0,0 +1,49 @@ +// +// immer: immutable data structures for C++ +// Copyright (C) 2016, 2017, 2018 Juan Pedro Bolivar Puente +// +// This software is distributed under the Boost Software License, Version 1.0. +// See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt +// + +#pragma once + +#include <libguile.h> + +namespace scm { +namespace detail { + +#define SCM_DECLTYPE_RETURN(...) \ + decltype(__VA_ARGS__) \ + { return __VA_ARGS__; } \ + /**/ + +template <typename... Ts> +constexpr bool is_valid_v = true; + +template <typename... Ts> +using is_valid_t = void; + +template <typename... Ts> +void check_call_once() +{ + static bool called = false; + if (called) scm_misc_error (nullptr, "Double defined binding. \ +This may be caused because there are multiple C++ binding groups in the same \ +translation unit. You may solve this by using different type tags for each \ +binding group.", SCM_EOL); + called = true; +} + +struct move_sequence +{ + move_sequence() = default; + move_sequence(const move_sequence&) = delete; + move_sequence(move_sequence&& other) + { other.moved_from_ = true; }; + + bool moved_from_ = false; +}; + +} // namespace detail +} // namespace scm |