1918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant//===----------------------------------------------------------------------===// 2918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// 3918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// The LLVM Compiler Infrastructure 4918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// 5918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// 8918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant//===----------------------------------------------------------------------===// 9918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant 10918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// <regex> 11918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant 12918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// template <class charT, class traits = regex_traits<charT>> class basic_regex; 13918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant 14918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// template <class ST, class SA> 15918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant// basic_regex(const basic_string<charT, ST, SA>& s); 16918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant 17918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant#include <regex> 18918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant#include <cassert> 19918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant 201e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnantstatic bool error_escape_thrown(const char *pat) 21918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant{ 221e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant bool result = false; 23918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant try { 241e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant std::regex re(pat); 25918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant } catch (std::regex_error &ex) { 261e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant result = (ex.code() == std::regex_constants::error_escape); 27918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant } 281e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant return result; 291e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant} 301e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant 311e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnantint main() 321e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant{ 331e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("[\\a]")); 341e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("\\a")); 351e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant 361e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("[\\e]")); 371e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("\\e")); 381e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant 391e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("[\\c:]")); 401e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("\\c:")); 411e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(error_escape_thrown("\\c")); 421e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(!error_escape_thrown("[\\cA]")); 431e1d05121d63b0156cef8e85f51ff448bc66a7dbHoward Hinnant assert(!error_escape_thrown("\\cA")); 44918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant 45918f2a80ababefb69a9e695767350f3912c7d127Howard Hinnant} 46