aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/typeAdapter.cpp4
-rw-r--r--vmime/typeAdapter.hpp27
2 files changed, 28 insertions, 3 deletions
diff --git a/src/typeAdapter.cpp b/src/typeAdapter.cpp
index 2170ed53..13651900 100644
--- a/src/typeAdapter.cpp
+++ b/src/typeAdapter.cpp
@@ -25,6 +25,8 @@ namespace vmime
{
+#if !defined(__GNUC__) || ((__GNUC__ >= 3) && (__GNUC_MINOR__ >= 3))
+
template <>
void typeAdapter <string>::parse(const string& buffer, const string::size_type position,
const string::size_type end, string::size_type* newPosition)
@@ -35,5 +37,7 @@ void typeAdapter <string>::parse(const string& buffer, const string::size_type p
*newPosition = end;
}
+#endif // !defined(__GNUC__) || ((__GNUC__ >= 3) && (__GNUC_MINOR__ >= 3))
+
} // vmime
diff --git a/vmime/typeAdapter.hpp b/vmime/typeAdapter.hpp
index 9d25f416..906f34a5 100644
--- a/vmime/typeAdapter.hpp
+++ b/vmime/typeAdapter.hpp
@@ -121,9 +121,30 @@ private:
};
-template <>
-void typeAdapter <string>::parse(const string& buffer, const string::size_type position,
- const string::size_type end, string::size_type* newPosition);
+#if defined(__GNUC__) && (__GNUC__ >= 3) && (__GNUC_MINOR__ <= 2)
+
+ // Because of a bug with g++ <= 3.2, we have to put the implementation
+ // of the function inline.
+
+ template <>
+ inline void typeAdapter <string>::parse
+ (const string& buffer, const string::size_type position,
+ const string::size_type end, string::size_type* newPosition)
+ {
+ m_value = string(buffer.begin() + position, buffer.begin() + end);
+
+ if (newPosition)
+ *newPosition = end;
+ }
+
+#else
+
+ template <>
+ void typeAdapter <string>::parse
+ (const string& buffer, const string::size_type position,
+ const string::size_type end, string::size_type* newPosition);
+
+#endif // defined(__GNUC__) && (__GNUC__ >= 3) && (__GNUC_MINOR__ <= 2)
} // vmime