blob: 0e8f32dc8ea2e90d1854371e987ac4123a2bce6a [file]
// { dg-do run }
// PR libstdc++/121054 std::bitset<0>("zero") should throw std::invalid_argument
#include <bitset>
#include <stdexcept>
#include <testsuite_hooks.h>
void
test01()
{
try {
std::bitset<0>(std::string("x"));
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(std::string("0x"));
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<0>(std::string("01"));
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(std::string("x0"), 1);
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
#if _GLIBCXX_USE_C99_WCHAR
try {
std::bitset<1>(std::wstring(L"0x"));
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(std::wstring(L"x0"), 1);
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
#endif
}
void
test02()
{
#if __cplusplus >= 201103L
try {
std::bitset<0>("x");
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>("0x", 2);
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>("0x", 1);
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<0>("01");
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
#if _GLIBCXX_USE_C99_WCHAR
try {
std::bitset<1>(L"0x", 2);
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(L"0x", 1);
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
#endif
#endif
}
void
test03()
{
#if __cpp_lib_bitset >= 202202L
try {
std::bitset<0>(std::string_view("x"));
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(std::string_view("0x"));
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<0>(std::string_view("01"));
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(std::string_view("x0"), 1);
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
#if _GLIBCXX_USE_C99_WCHAR
try {
std::bitset<1>(std::wstring_view(L"0x"));
VERIFY( false );
}
catch(std::invalid_argument& fail) {
VERIFY( true );
}
catch(...) {
VERIFY( false );
}
try {
std::bitset<1>(std::wstring_view(L"x0"), 1);
VERIFY( true );
}
catch(std::invalid_argument& fail) {
VERIFY( false );
}
catch(...) {
VERIFY( false );
}
#endif
#endif
}
int main()
{
test01();
test02();
test03();
}