diff -Naur a/boost/algorithm/string/detail/finder.hpp b/boost/algorithm/string/detail/finder.hpp
--- a/boost/algorithm/string/detail/finder.hpp	2009-09-13 12:10:55.000000000 -0700
+++ b/boost/algorithm/string/detail/finder.hpp	2015-04-15 09:02:18.683944124 -0700
@@ -142,7 +142,6 @@
                     ForwardIteratorT End,
                     std::forward_iterator_tag ) const
                 {
-                    typedef ForwardIteratorT input_iterator_type;
                     typedef iterator_range<ForwardIteratorT> result_type;
 
                     first_finder_type first_finder(
@@ -263,7 +262,6 @@
                     ForwardIteratorT End,
                     unsigned int N) const
                 {
-                    typedef ForwardIteratorT input_iterator_type;
                     typedef iterator_range<ForwardIteratorT> result_type;
 
                     // Sanity check
@@ -298,7 +296,6 @@
                     ForwardIteratorT End,
                     unsigned int N) const
                 {
-                    typedef ForwardIteratorT input_iterator_type;
                     typedef iterator_range<ForwardIteratorT> result_type;
 
                     // Sanity check
@@ -362,7 +359,6 @@
                 unsigned int N,
                 std::random_access_iterator_tag )
             {
-                typedef ForwardIteratorT input_iterator_type;
                 typedef iterator_range<ForwardIteratorT> result_type;
 
                 if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
@@ -436,7 +432,6 @@
                 unsigned int N,
                 std::random_access_iterator_tag )
             {
-                typedef ForwardIteratorT input_iterator_type;
                 typedef iterator_range<ForwardIteratorT> result_type;
 
                 if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
diff -Naur a/boost/bind/arg.hpp b/boost/bind/arg.hpp
--- a/boost/bind/arg.hpp	2007-11-25 10:07:19.000000000 -0800
+++ b/boost/bind/arg.hpp	2015-04-15 09:02:18.683944124 -0700
@@ -34,7 +34,6 @@
     template< class T > arg( T const & /* t */ )
     {
         // static assert I == is_placeholder<T>::value
-        typedef char T_must_be_placeholder[ I == is_placeholder<T>::value? 1: -1 ];
     }
 };
 
diff -Naur a/boost/concept/detail/general.hpp b/boost/concept/detail/general.hpp
--- a/boost/concept/detail/general.hpp	2010-06-08 12:31:13.000000000 -0700
+++ b/boost/concept/detail/general.hpp	2015-04-15 09:02:18.683944124 -0700
@@ -12,6 +12,15 @@
 #  include <boost/mpl/if.hpp>
 # endif
 
+
+// If the compiler warns about unused typedefs then enable this:
+//
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
+#  define BOOST_CONCEPT_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
+#else
+#  define BOOST_CONCEPT_ASSERT_UNUSED_ATTRIBUTE
+#endif
+
 // This implementation works on Comeau and GCC, all the way back to
 // 2.95
 namespace boost { namespace concepts {
@@ -68,7 +77,7 @@
 #  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \
     typedef ::boost::concepts::detail::instantiate<          \
     &::boost::concepts::requirement_<ModelFnPtr>::failed>    \
-      BOOST_PP_CAT(boost_concept_check,__LINE__)
+      BOOST_PP_CAT(boost_concept_check,__LINE__) BOOST_CONCEPT_ASSERT_UNUSED_ATTRIBUTE
 
 }}
 
diff -Naur a/boost/ptr_container/detail/move.hpp b/boost/ptr_container/detail/move.hpp
--- a/boost/ptr_container/detail/move.hpp	2008-03-22 14:45:55.000000000 -0700
+++ b/boost/ptr_container/detail/move.hpp	2015-04-15 09:02:18.699944284 -0700
@@ -20,7 +20,7 @@
 template<typename Ptr>
 class move_source {
 public:
-    move_source(Ptr& ptr) : ptr_(ptr) {}
+    move_source(Ptr& ptrArg) : ptr_(ptrArg) {}
     Ptr& ptr() const { return ptr_; }
 private:
     Ptr& ptr_;
diff -Naur a/boost/ptr_container/detail/reversible_ptr_container.hpp b/boost/ptr_container/detail/reversible_ptr_container.hpp
--- a/boost/ptr_container/detail/reversible_ptr_container.hpp	2009-04-05 12:55:59.000000000 -0700
+++ b/boost/ptr_container/detail/reversible_ptr_container.hpp	2015-04-15 09:02:18.699944284 -0700
@@ -278,9 +278,9 @@
 
     private:
         template< class ForwardIterator >
-        ForwardIterator advance( ForwardIterator begin, size_type n ) 
+        ForwardIterator advance( ForwardIterator beginArg, size_type n ) 
         {
-            ForwardIterator iter = begin;
+            ForwardIterator iter = beginArg;
             std::advance( iter, n );
             return iter;
         }        
diff -Naur a/boost/ptr_container/detail/static_move_ptr.hpp b/boost/ptr_container/detail/static_move_ptr.hpp
--- a/boost/ptr_container/detail/static_move_ptr.hpp	2008-03-22 14:45:55.000000000 -0700
+++ b/boost/ptr_container/detail/static_move_ptr.hpp	2015-04-15 09:02:18.699944284 -0700
@@ -151,7 +151,7 @@
     deleter_const_reference get_deleter() const { return impl_.second(); }
 private:
     template<typename TT, typename DD>
-    void check(const static_move_ptr<TT, DD>& ptr)
+    void check(const static_move_ptr<TT, DD>& ptrArg)
         {
             typedef move_ptrs::is_smart_ptr_convertible<TT, T> convertible;
             BOOST_STATIC_ASSERT(convertible::value);
diff -Naur a/boost/ptr_container/exception.hpp b/boost/ptr_container/exception.hpp
--- a/boost/ptr_container/exception.hpp	2008-03-22 14:45:55.000000000 -0700
+++ b/boost/ptr_container/exception.hpp	2015-04-15 09:02:18.699944284 -0700
@@ -24,7 +24,7 @@
     {
         const char* what_;
     public:
-        bad_ptr_container_operation( const char* what ) : what_( what )
+        bad_ptr_container_operation( const char* whatArg ) : what_( whatArg )
         { }
         
         virtual const char* what() const throw()
@@ -38,7 +38,7 @@
     class bad_index : public bad_ptr_container_operation
     {
     public:
-        bad_index( const char* what ) : bad_ptr_container_operation( what )
+        bad_index( const char* whatArg ) : bad_ptr_container_operation( whatArg )
         { }
     };
 
diff -Naur a/boost/system/error_code.hpp b/boost/system/error_code.hpp
--- a/boost/system/error_code.hpp	2010-07-06 03:47:30.000000000 -0700
+++ b/boost/system/error_code.hpp	2015-04-15 09:02:18.695944245 -0700
@@ -211,9 +211,9 @@
     inline const error_category &  get_system_category() { return system_category(); }
     inline const error_category &  get_generic_category() { return generic_category(); }
     inline const error_category &  get_posix_category() { return generic_category(); }
-    static const error_category &  posix_category = generic_category();
-    static const error_category &  errno_ecat     = generic_category();
-    static const error_category &  native_ecat    = system_category();
+    //static const error_category &  posix_category = generic_category();
+    //static const error_category &  errno_ecat     = generic_category();
+    //static const error_category &  native_ecat    = system_category();
 # endif
 
     //  class error_condition  -----------------------------------------------//
