Fixes for compilation/segfault problems with Intel (issue 94)
diff --git a/include/pybind11/attr.h b/include/pybind11/attr.h
index 15d5982..8c77a41 100644
--- a/include/pybind11/attr.h
+++ b/include/pybind11/attr.h
@@ -277,7 +277,7 @@
 };
 
 /// Ignore that a variable is unused in compiler warnings
-template<class T> void ignore_unused(const T&) { }
+inline void ignore_unused(const int *) { }
 
 /// Recursively iterate over variadic template arguments
 template <typename... Args> struct process_attributes {
diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h
index 2dfcc77..b153d6e 100644
--- a/include/pybind11/cast.h
+++ b/include/pybind11/cast.h
@@ -519,9 +519,16 @@
 
     explicit operator type*() { return this->value; }
     explicit operator type&() { return *(this->value); }
-    explicit operator holder_type&() { return holder; }
     explicit operator holder_type*() { return &holder; }
 
+    // Workaround for Intel compiler bug
+    // see pybind11 issue 94
+    #if defined(__ICC) || defined(__INTEL_COMPILER)
+    operator holder_type&() { return holder; }
+    #else
+    explicit operator holder_type&() { return holder; }
+    #endif
+
     static handle cast(const holder_type &src, return_value_policy policy, handle parent) {
         return type_caster_generic::cast(
             src.get(), policy, parent, &typeid(type), &copy_constructor, &src);