From fb7c98948735343095414ca2c5462af2304883a4 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Wed, 19 Dec 2018 17:12:28 +1100 Subject: [PATCH] view: allow construction from anything that has begin/end --- view.hpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/view.hpp b/view.hpp index 11c85a21..8415263a 100644 --- a/view.hpp +++ b/view.hpp @@ -44,18 +44,28 @@ namespace cruft { m_end (last) { ; } + template < typename ContainerT, - typename = std::enable_if_t>,void> + typename = std::void_t< + decltype (std::declval ().begin ()), + decltype (std::declval ().end ()) + > > - view (ContainerT &rhs): - view (rhs.begin (), rhs.end ()) + view (ContainerT &rhs) noexcept ( + noexcept (std::declval ().begin ()) && + noexcept (std::declval ().end ()) + ) + : view (rhs.begin (), rhs.end ()) { ; } template < typename ContainerT, - typename = std::enable_if_t>,void> + typename = std::void_t< + decltype (std::declval ().begin ()), + decltype (std::declval ().end ()) + > > view (const ContainerT &rhs): view (rhs.begin (), rhs.end ()) @@ -447,12 +457,14 @@ namespace cruft { template view (ContainerT&) -> view< - typename ContainerT::iterator + decltype (std::declval ().begin ()), + decltype (std::declval ().end ()) >; template view (const ContainerT&) -> view< - typename ContainerT::const_iterator + decltype (std::declval ().begin ()), + decltype (std::declval ().end ()) >; // base + count constructor