我正在将VS2002 C ++项目升级到VS2013。该项目使用GRETA正则表达式库。从我看来它没有维护,我无法在任何地方找到更新版本。我想尽可能少地改变我的项目,所以我不想取代GRETA。
restack.h(原文)
namespace detail
{
// For compile-time assertions that generate
// no run-time overhead.
template< bool f > struct static_assert;
template<> struct static_assert<true> { static_assert() {} };
// Work-around for a template-template parameter problem on VC7.0
template< typename T > struct type2type { typedef T type; };
template< bool F > struct bool2type { enum { value = F }; };
typedef bool2type<true> true_t;
typedef bool2type<false> false_t;
restack.h(已修改)
namespace regex
{
namespace detail
{
// For compile-time assertions that generate
// no run-time overhead.
template< bool f > struct t_static_assert;
template<> struct t_static_assert < true > { t_static_assert() { } };
// Work-around for a template-template parameter problem on VC7.0
template< typename T > struct type2type { typedef T type; };
template< bool F > struct bool2type { enum { value = F }; };
typedef bool2type<true> true_t;
typedef bool2type<false> false_t;
我相信我遇到了问题,因为static_assert是VC11中的关键字而不是VC6中的关键字。所以我把t_添加到前面。现在我在regexpr2.h中遇到了这个编译错误:
error C2079: 'iterator_types_are_not_convertible' uses undefined
struct 'regex::detail::t_static_assert<false>'
regexpr2.h(已修改)
// If your compile breaks here, it is because CharT* is not
// convertible to type IterT. Check the declaration of your rpattern object.
detail::t_static_assert< detail::is_convertible<CharT*, IterT>::value > const iterator_types_are_not_convertible;
( void ) iterator_types_are_not_convertible;
GRETA可在此处发布:http://research.microsoft.com/en-us/downloads/bd99f343-4ff4-4041-8293-34c054efe749/default.aspx
我该如何解决这个问题?