#ifndef NEITHER_TRAITS_HPP #define NEITHER_TRAITS_HPP namespace neither { template struct Either; template struct Maybe; template auto isCopyable (L l, Xs...) -> L { return l; } template auto ensureEither ( Either const& e) -> Either { return e; } template auto ensureEither ( Either && e) -> Either { return e; } template auto ensureEitherRight ( Either const& e, R) -> Either { return e; } template auto ensureEitherRight ( Either&& e, R&&) -> Either { return e; } template auto ensureEitherLeft ( Either const& e, L) -> Either { return e; } template auto ensureEitherLeft ( Either&& e, L&& ) -> Either { return e; } template auto ensureMaybe ( Maybe const& e) -> Maybe { return e; } } #endif