Вы используете оператор, который сравнивает std::string с const char*. В этой функции предполагается, что const char* указывает на строку c-string с нулевым завершением (т.е. '\0'). Поскольку '\t' приходит после терминатора, функция не рассматривает его как часть строки и, по сути, не имеет никакого хорошего способа даже понять, что она есть.
Вы можете сделать это:
if (s == std::string("\0\t",2))
Это построит std::string с полным строковым литералом (минус завершающий '\0', который добавляет компилятор), и сравним вашу строку с этим.
Ответ 2
В дополнение к ответу Бенджамина. В С++ 14 представлены строковые литералы. Он позволяет указать, что последовательность char (например, "a\0bc" ) должна рассматриваться как строка. Вам просто нужен s-суффикс.
using namespace std::string_literals;
if (s == "\0\t"s)