Skip to content

Commit

Permalink
Fix llvm.org/PR33000.
Browse files Browse the repository at this point in the history
  • Loading branch information
mpark committed May 12, 2017
1 parent 8805968 commit ee2c95d
Showing 1 changed file with 7 additions and 14 deletions.
21 changes: 7 additions & 14 deletions include/mpark/variant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,28 +415,21 @@ namespace mpark {
constexpr auto fmatrix =
make_fmatrix<Visitor &&,
decltype(std::forward<Vs>(vs).as_base())...>();
const std::size_t indices[] = {vs.index()...};
return at(fmatrix, indices)(std::forward<Visitor>(visitor),
std::forward<Vs>(vs).as_base()...);
return at(fmatrix, vs.index()...)(std::forward<Visitor>(visitor),
std::forward<Vs>(vs).as_base()...);
}

private:
template <typename T>
inline static constexpr const T &at_impl(const T &elem,
const std::size_t *) {
inline static constexpr const T &at(const T &elem) {
return elem;
}

template <typename T, std::size_t N>
inline static constexpr auto &&at_impl(const std::array<T, N> &elems,
const std::size_t *index) {
return at_impl(elems[*index], index + 1);
}

template <typename T, std::size_t N, std::size_t I>
template <typename T, std::size_t N, typename... Is>
inline static constexpr auto &&at(const std::array<T, N> &elems,
const std::size_t (&indices)[I]) {
return at_impl(elems, indices);
std::size_t i,
Is... is) {
return at(elems[i], is...);
}

template <typename F, typename... Fs>
Expand Down

0 comments on commit ee2c95d

Please sign in to comment.