one more attempt at MSVC compatibility
diff --git a/theta/include/conditional_back_inserter.hpp b/theta/include/conditional_back_inserter.hpp
index 5e7f2ef..e9b0590 100644
--- a/theta/include/conditional_back_inserter.hpp
+++ b/theta/include/conditional_back_inserter.hpp
@@ -28,8 +28,8 @@
 template <typename Container, typename Predicate>
 class conditional_back_insert_iterator: public std::back_insert_iterator<Container> {
 public:
-  conditional_back_insert_iterator(Container& c, Predicate& p): std::back_insert_iterator<Container>(c), p(p) {}
-  conditional_back_insert_iterator(Container& c, Predicate&& p): std::back_insert_iterator<Container>(c), p(std::forward<Predicate>(p)) {}
+  template<typename P>
+  conditional_back_insert_iterator(Container& c, P&& p): std::back_insert_iterator<Container>(c), p(std::forward<P>(p)) {}
 
   conditional_back_insert_iterator& operator=(typename Container::const_reference value) {
     if (p(value)) std::back_insert_iterator<Container>::operator=(value);
@@ -45,11 +45,6 @@
 };
 
 template<typename Container, typename Predicate>
-conditional_back_insert_iterator<Container, Predicate> conditional_back_inserter(Container& c, Predicate& p) {
-  return conditional_back_insert_iterator<Container, Predicate>(c, p);
-}
-
-template<typename Container, typename Predicate>
 conditional_back_insert_iterator<Container, Predicate> conditional_back_inserter(Container& c, Predicate&& p) {
   return conditional_back_insert_iterator<Container, Predicate>(c, std::forward<Predicate>(p));
 }