// Copyright (C) 2018 T. Zachary Laine // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include using namespace boost::parser; void compile_seq_attribute() { char const chars[] = ""; auto first = std::begin(chars); auto const last = std::end(chars); // scalar and eps { constexpr auto parser = int_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = eps >> int_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } // scalar >> scalar { constexpr auto parser = char_ >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = eps >> char_ >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = char_ >> eps >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = char_ >> char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = int_ >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>>); } { constexpr auto parser = eps >> int_ >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>>); } { constexpr auto parser = int_ >> eps >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>>); } { constexpr auto parser = int_ >> char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>>); } // -scalar >> -scalar { constexpr auto parser = -char_ >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = eps >> -char_ >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = -char_ >> eps >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = -char_ >> -char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = -int_ >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional, std::optional>>>); } { constexpr auto parser = eps >> -int_ >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional, std::optional>>>); } { constexpr auto parser = -int_ >> eps >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional, std::optional>>>); } { constexpr auto parser = -int_ >> -char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional, std::optional>>>); } // seq >> seq { constexpr auto parser = *char_ >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = eps >> *char_ >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = *char_ >> eps >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = *char_ >> *char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = *string("str") >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, std::vector>>>); } { constexpr auto parser = eps >> *string("str") >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, std::vector>>>); } { constexpr auto parser = *string("str") >> eps >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, std::vector>>>); } { constexpr auto parser = *string("str") >> *string("str") >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, std::vector>>>); } // seq >> seq { constexpr auto parser = *char_ >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v>>); } { constexpr auto parser = eps >> *char_ >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v>>); } { constexpr auto parser = *(char_ - "str") >> eps >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v>>); } { constexpr auto parser = *(char_ >> eps) >> eps >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v>>); } { constexpr auto parser = *char_ >> eps >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v>>); } { constexpr auto parser = *char_ >> *string("str") >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v>>); } // seq >> T { constexpr auto parser = *char_ >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = eps >> *char_ >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = *char_ >> eps >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = *char_ >> char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = *string("str") >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, char>>>); } { constexpr auto parser = eps >> *string("str") >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, char>>>); } { constexpr auto parser = *string("str") >> eps >> char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, char>>>); } { constexpr auto parser = *string("str") >> char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional, char>>>); } // T >> seq { constexpr auto parser = char_ >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = eps >> char_ >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = char_ >> eps >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = char_ >> *char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = char_ >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>>); } { constexpr auto parser = eps >> char_ >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>>); } { constexpr auto parser = char_ >> eps >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>>); } { constexpr auto parser = char_ >> *string("str") >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>>); } // seq >> std::optional { constexpr auto parser = *char_ >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = eps >> *char_ >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = *char_ >> eps >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = *char_ >> -char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = *string("str") >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = eps >> *string("str") >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = *string("str") >> eps >> -char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } { constexpr auto parser = *string("str") >> -char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::optional>>>); } // std::optional >> seq { constexpr auto parser = -char_ >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = eps >> -char_ >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = -char_ >> eps >> *char_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = -char_ >> *char_ >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v>); } { constexpr auto parser = -char_ >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = eps >> -char_ >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = -char_ >> eps >> *string("str"); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = -char_ >> *string("str") >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } // seq grouping { constexpr auto parser = (-char_ >> *string("str")) >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = -char_ >> (*string("str") >> eps); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = eps >> (-char_ >> *string("str") >> eps); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = eps >> (-char_ >> *string("str") >> eps) >> eps; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert( std::is_same_v< attr_t, std::optional< tuple, std::vector>>>); } { constexpr auto parser = int_ >> string("str") >> double_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = (int_ >> string("str")) >> double_; using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = int_ >> (string("str") >> double_); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } { constexpr auto parser = (int_ >> string("str")) >> (double_ >> int_); using attr_t = decltype(prefix_parse(first, last, parser)); static_assert(std::is_same_v< attr_t, std::optional>>); } }