diff --git a/lib/matchcompiler.h b/lib/matchcompiler.h
new file mode 100644
index 000000000..53cca9dcb
--- /dev/null
+++ b/lib/matchcompiler.h
@@ -0,0 +1,75 @@
+/*
+ * Cppcheck - A tool for static C/C++ code analysis
+ * Copyright (C) 2007-2015 Daniel Marjamäki and Cppcheck team.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+//---------------------------------------------------------------------------
+#ifndef matchcompilerH
+#define matchcompilerH
+
+#include
+
+namespace MatchCompiler {
+
+ template
+ class ConstString {
+ public:
+ typedef const char(&StringRef)[n];
+ explicit ConstString(StringRef s)
+ :_s(s) {
+ }
+
+ operator StringRef() const {
+ return _s;
+ }
+
+ private:
+ StringRef _s;
+ };
+
+ template
+ inline bool equalN(const char s1[], const char s2[])
+ {
+ return (*s1 == *s2) && equalN(s1+1, s2+1);
+ }
+
+ template <>
+ inline bool equalN<0>(const char [], const char [])
+ {
+ return true;
+ }
+
+ template
+ inline bool operator==(const std::string & s1, ConstString const & s2)
+ {
+ return equalN(s1.c_str(), s2);
+ }
+
+ template
+ inline bool operator!=(const std::string & s1, ConstString const & s2)
+ {
+ return !operator==(s1,s2);
+ }
+
+ template
+ inline ConstString makeConstString(const char(&s)[n])
+ {
+ return ConstString(s);
+ }
+}
+
+#endif // matchcompilerH
+