#define _GLIBCXX_CONCEPT_CHECKS
#include <regex>
void f() { std::regex r("hello"); }
當在任一GCC或鏘以上is compiled如C++ 11,將產生一個巨大模板誤差,關鍵部分似乎其中爲:爲什麼創建一個`std :: regex`違反概念?
/opt/gcc-5.3.0/include/c++/5.3.0/bits/boost_concept_check.h:206:11: error: use of deleted function 'std::__detail::_StateSeq >& std::__detail::_StateSeq >::operator=(const std::__detail::_StateSeq >&)'
__a = __a; // require assignment operator
^
但是考慮在一個猜測這是什麼意思,我注意到std::regex does have an assignment operator。
此外,我的理解是,啓用概念不應改變代碼是否編譯。但是,刪除#define
使其編譯。
問題的兩個部分:
- 這是錯誤和概念才能啓用它的外觀,正確的行爲?
- 如果是的話,我如何假設作出正則表達式?
只是猜測,嘗試在構造函數中使用'std :: string'而不是字符串常量。 –
gcc 6.1沒有給出任何錯誤,似乎是一個老gcc的bug –