105#ifndef LIB_META_VIRTUAL_COPY_SUPPORT_H
106#define LIB_META_VIRTUAL_COPY_SUPPORT_H
111#include <type_traits>
120 using std::is_move_constructible;
121 using std::is_copy_constructible;
122 using std::is_copy_assignable;
132 template<
class IFA,
class BASE = EmptyBase>
147 template<
class I,
class D,
class B =I>
155 throw error::Logic{
"Copy construction invoked but target is noncopyable"};
161 throw error::Logic{
"Move construction invoked but target is noncopyable"};
167 throw error::Logic{
"Assignment invoked but target is not assignable"};
173 throw error::Logic{
"Assignment invoked but target is not assignable"};
178 template<
class I,
class D,
class B =I>
186 throw error::Logic{
"Copy construction invoked but target allows only move construction"};
192 D&
src =
static_cast<D&
> (*this);
202 template<
class I,
class D,
class B =I>
210 D
const&
src =
static_cast<D
const&
> (*this);
218 template<
class I,
class D,
class B =I>
226 D& t = D::downcast(target);
227 D
const& s =
static_cast<D
const&
> (*this);
234 D& t = D::downcast(target);
235 D& s =
static_cast<D&
> (*this);
251 : __and_<is_move_constructible<X>
252 ,__not_<is_copy_constructible<X>>
253 ,__not_<is_copy_assignable<X>>
259 : __and_<is_move_constructible<X>
260 ,is_copy_constructible<X>
261 ,__not_<is_copy_assignable<X>>
267 : __and_<is_move_constructible<X>
268 ,is_copy_constructible<X>
269 ,is_copy_assignable<X>
280 template<
class X,
class SEL=
void>
283 template<
class I,
class D,
class B =I>
290 template<
class I,
class D,
class B =I>
297 template<
class I,
class D,
class B =I>
304 template<
class I,
class D,
class B =I>
Lumiera error handling (C++ interface).
Implementation namespace for support and library code.
LumieraError< LERR_(LOGIC)> Logic