From 79c2cd6336196615c98e03c4b3aff9855464a58e Mon Sep 17 00:00:00 2001
From: Adam Wardynski <award@.(win7-laptop)>
Date: Sat, 13 Nov 2010 21:40:42 +0100
Subject: [PATCH] Looks like there's no conversion between const char* and
 string::const_iterator on MSVC (actually it sounds safer if you ask me).
 Anyway, working around that by wrapping const char* around a std::string

---
 libcorpus2/tagset.cpp |  5 +++++
 libcorpus2/tagset.h   | 12 ++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/libcorpus2/tagset.cpp b/libcorpus2/tagset.cpp
index 8fbb296..e240721 100644
--- a/libcorpus2/tagset.cpp
+++ b/libcorpus2/tagset.cpp
@@ -280,7 +280,12 @@ Tag Tagset::make_tag(idx_t pos_idx, mask_t values, bool allow_extra) const
 
 Tag Tagset::make_ign_tag() const
 {
+#ifndef _MSC_VER
 	mask_t ign_pos_mask = get_pos_mask("ign");
+#else //no const char* to std::string::const_iterator conversion
+	static const std::string ign("ign");
+	mask_t ign_pos_mask = get_pos_mask(ign);
+#endif
 	assert(ign_pos_mask.any());
 	return Tag(ign_pos_mask);
 }
diff --git a/libcorpus2/tagset.h b/libcorpus2/tagset.h
index 572e5b4..a896d34 100644
--- a/libcorpus2/tagset.h
+++ b/libcorpus2/tagset.h
@@ -135,7 +135,11 @@ public:
 	 */
 	void parse_tag(const char* c, bool allow_extra,
 			boost::function<void (const Tag&)> sink) const {
+#ifndef _MSC_VER
 		parse_tag(std::make_pair(c, c + strlen(c)), allow_extra, sink);
+#else // no const char* to std::string::const_iterator conversion
+		parse_tag(std::string(c), allow_extra, sink);
+#endif
 	}
 
 	/**
@@ -174,7 +178,11 @@ public:
 	 * version.
 	 */
 	std::vector<Tag> parse_tag(const char* c, bool allow_extra) const {
+#ifndef _MSC_VER
 		return parse_tag(std::make_pair(c, c + strlen(c)), allow_extra);
+#else // no const char* to std::string::const_iterator conversion
+		return parse_tag(std::string(c), allow_extra);
+#endif
 	}
 
 	/**
@@ -201,8 +209,12 @@ public:
 	 * version.
 	 */
 	Tag parse_simple_tag(const char* c, bool allow_extra) const {
+#ifndef _MSC_VER
 		return parse_simple_tag(std::make_pair(c, c + strlen(c)),
 				allow_extra);
+#else // no const char* to std::string::const_iterator conversion
+		return parse_simple_tag(std::string(c), allow_extra);	
+#endif
 	}
 
 	/**
-- 
GitLab