@@ -161,16 +161,46 @@ BOOST_HANA_NAMESPACE_BEGIN
161161
162162 template <>
163163 struct first_impl <pair_tag> {
164- template <typename P>
165- static constexpr decltype (auto ) apply(P&& p)
166- { return detail::ebo_get<detail::pix<0 >>(static_cast <P&&>(p)); }
164+ template <typename First, typename Second>
165+ static constexpr decltype (auto ) apply(hana::pair<First, Second>& p) {
166+ return detail::ebo_get<detail::pix<0 >>(
167+ static_cast <detail::ebo<detail::pix<0 >, First>&>(p)
168+ );
169+ }
170+ template <typename First, typename Second>
171+ static constexpr decltype (auto ) apply(hana::pair<First, Second> const & p) {
172+ return detail::ebo_get<detail::pix<0 >>(
173+ static_cast <detail::ebo<detail::pix<0 >, First> const &>(p)
174+ );
175+ }
176+ template <typename First, typename Second>
177+ static constexpr decltype (auto ) apply(hana::pair<First, Second>&& p) {
178+ return detail::ebo_get<detail::pix<0 >>(
179+ static_cast <detail::ebo<detail::pix<0 >, First>&&>(p)
180+ );
181+ }
167182 };
168183
169184 template <>
170185 struct second_impl <pair_tag> {
171- template <typename P>
172- static constexpr decltype (auto ) apply(P&& p)
173- { return detail::ebo_get<detail::pix<1 >>(static_cast <P&&>(p)); }
186+ template <typename First, typename Second>
187+ static constexpr decltype (auto ) apply(hana::pair<First, Second>& p) {
188+ return detail::ebo_get<detail::pix<1 >>(
189+ static_cast <detail::ebo<detail::pix<1 >, Second>&>(p)
190+ );
191+ }
192+ template <typename First, typename Second>
193+ static constexpr decltype (auto ) apply(hana::pair<First, Second> const & p) {
194+ return detail::ebo_get<detail::pix<1 >>(
195+ static_cast <detail::ebo<detail::pix<1 >, Second> const &>(p)
196+ );
197+ }
198+ template <typename First, typename Second>
199+ static constexpr decltype (auto ) apply(hana::pair<First, Second>&& p) {
200+ return detail::ebo_get<detail::pix<1 >>(
201+ static_cast <detail::ebo<detail::pix<1 >, Second>&&>(p)
202+ );
203+ }
174204 };
175205BOOST_HANA_NAMESPACE_END
176206
0 commit comments