diff --git a/ndnboost/smart_ptr/detail/allocate_array_helper.hpp b/ndnboost/smart_ptr/detail/allocate_array_helper.hpp
index a67e6e8..a0ad380 100644
--- a/ndnboost/smart_ptr/detail/allocate_array_helper.hpp
+++ b/ndnboost/smart_ptr/detail/allocate_array_helper.hpp
@@ -33,10 +33,10 @@
             struct rebind {
                 typedef allocate_array_helper<A, T[], U> other;
             };
-            allocate_array_helper(const A& allocator, std::size_t size, T** data)
-                : allocator(allocator),
-                  size(sizeof(T) * size),
-                  data(data) {
+            allocate_array_helper(const A& allocator_, std::size_t size_, T** data_)
+                : allocator(allocator_),
+                  size(sizeof(T) * size_),
+                  data(data_) {
             }
             template<class U>
             allocate_array_helper(const allocate_array_helper<A, T[], U>& other) 
@@ -107,9 +107,9 @@
             struct rebind {
                 typedef allocate_array_helper<A, T[N], U> other;
             };
-            allocate_array_helper(const A& allocator, T** data)
-                : allocator(allocator),
-                  data(data) {
+            allocate_array_helper(const A& allocator_, T** data_)
+                : allocator(allocator_),
+                  data(data_) {
             }
             template<class U>
             allocate_array_helper(const allocate_array_helper<A, T[N], U>& other) 
diff --git a/ndnboost/smart_ptr/detail/array_deleter.hpp b/ndnboost/smart_ptr/detail/array_deleter.hpp
index 2afe96c..14dcfb2 100644
--- a/ndnboost/smart_ptr/detail/array_deleter.hpp
+++ b/ndnboost/smart_ptr/detail/array_deleter.hpp
@@ -19,8 +19,8 @@
         template<typename T>
         class array_deleter<T[]> {
         public:
-            array_deleter(std::size_t size)
-                : size(size),
+            array_deleter(std::size_t size_)
+                : size(size_),
                   object(0) {
             }
             ~array_deleter() {
diff --git a/ndnboost/smart_ptr/detail/make_array_helper.hpp b/ndnboost/smart_ptr/detail/make_array_helper.hpp
index e989f22..1105137 100644
--- a/ndnboost/smart_ptr/detail/make_array_helper.hpp
+++ b/ndnboost/smart_ptr/detail/make_array_helper.hpp
@@ -31,9 +31,9 @@
             struct rebind {
                 typedef make_array_helper<T[], U> other;
             };
-            make_array_helper(std::size_t size, T** data)
-                : size(sizeof(T) * size),
-                  data(data) {
+            make_array_helper(std::size_t size_, T** data_)
+                : size(sizeof(T) * size_),
+                  data(data_) {
             }
             template<class U>
             make_array_helper(const make_array_helper<T[], U>& other) 
@@ -72,7 +72,7 @@
                 memory->~Y();
             }
             template<typename U>
-            bool operator==(const make_array_helper<T[], U>& other) const {
+            bool operator==(const make_array_helper<T[], U>&) const {
                 return true;
             }
             template<typename U>
@@ -99,8 +99,8 @@
             struct rebind {
                 typedef make_array_helper<T[N], U> other;
             };
-            make_array_helper(T** data)
-                : data(data) {
+            make_array_helper(T** data_)
+                : data(data_) {
             }
             template<class U>
             make_array_helper(const make_array_helper<T[N], U>& other) 
@@ -138,7 +138,7 @@
                 memory->~Y();
             }
             template<typename U>
-            bool operator==(const make_array_helper<T[N], U>& other) const {
+            bool operator==(const make_array_helper<T[N], U>&) const {
                 return true;
             }
             template<typename U>
diff --git a/ndnboost/smart_ptr/detail/shared_count.hpp b/ndnboost/smart_ptr/detail/shared_count.hpp
index ad53ec0..f723584 100644
--- a/ndnboost/smart_ptr/detail/shared_count.hpp
+++ b/ndnboost/smart_ptr/detail/shared_count.hpp
@@ -200,7 +200,7 @@
         }
         catch( ... )
         {
-            D()( p ); // delete p
+            D::operator_fn( p ); // delete p
             throw;
         }
 
@@ -210,7 +210,7 @@
 
         if( pi_ == 0 )
         {
-            D()( p ); // delete p
+            D::operator_fn( p ); // delete p
             ndnboost::throw_exception( std::bad_alloc() );
         }
 
@@ -286,7 +286,7 @@
         }
         catch(...)
         {
-            D()( p );
+            D::operator_fn( p );
 
             if( pi_ != 0 )
             {
@@ -306,7 +306,7 @@
         }
         else
         {
-            D()( p );
+            D::operator_fn( p );
             ndnboost::throw_exception( std::bad_alloc() );
         }
 
