Index: at_impl.hpp
===================================================================
--- at_impl.hpp	(revision 40427)
+++ at_impl.hpp	(working copy)
@@ -25,25 +25,22 @@
         template <>
         struct at_impl<cons_tag>
         {
-            template <typename Sequence, typename N>
-            struct apply 
+            template <typename Sequence, int N>
+            struct elem_at_c
             {
-                typedef typename
-                    mpl::eval_if<
-                        is_const<Sequence>
-                      , add_const<typename Sequence::cdr_type>
-                      , mpl::identity<typename Sequence::cdr_type>
-                    >::type
-                cdr_type;
-
                 typedef typename 
                     mpl::eval_if<
-                        mpl::bool_<N::value == 0>
+                        mpl::bool_<N == 0>
                       , mpl::identity<typename Sequence::car_type>
-                      , apply<cdr_type, mpl::int_<N::value-1> >
-                    >
-                element;
+                      , elem_at_c<typename Sequence::cdr_type, N-1>
+                    >::type
+                type;
+            };
 
+            template <typename Sequence, typename N>
+            struct apply 
+            {
+                typedef elem_at_c<Sequence, N::value> element;
                 typedef typename
                     mpl::eval_if<
                         is_const<Sequence>
