Why is the POSIX basic regular expression "[" considered valid in POSIX C but has a syntax error in C++.
Here's a program to illustrate the issue:
#include <cassert>
#include <iostream>
#include <regex>
#include <regex.h>
int main(int argc, char** argv)
{
    const char pattern[] = "\\["; // Two backslashes needed to get one
    std::cout << "pattern: \"" << pattern << "\"" << std::endl;
    regex_t reg;
    int     status = ::regcomp(®, pattern, 0);
    std::cout << "::regcomp() " << (status ? "failed" : "succeeded") <<
            std::endl;
    try {
        std::regex regex(pattern, std::regex::basic);
        std::cout << "std::regex() succeeded" << std::endl;
    }
    catch (const std::regex_error& ex) {
        std::cout << "std::regex() failed" << std::endl;
    }
}
On my system (CentOS 7, g++ 4.8.5):
$ g++ -std=c++11 -Wall a.c
$ ./a.out
pattern: "^\[$"
::regcomp() succeeded
std::regex() failed
$