47        static_assert(
sizeof(subject) == 
sizeof(subject.val));
 
   48        static_assert(subject.size == subject.val.size());
 
   52        BEAST_EXPECT(subject.val.size() == 3);
 
   57        subject.val[0] = obj1;
 
   58        subject.val[1] = obj2;
 
   61            testcase(
"forApiVersions, forAllApiVersions");
 
   64            static int const primes[] = {2,  3,  5,  7,  11, 13, 17, 19, 23,
 
   65                                         29, 31, 37, 41, 43, 47, 53, 59, 61,
 
   66                                         67, 71, 73, 79, 83, 89, 97};
 
   75            int productAllVersions = 1;
 
   81                BEAST_EXPECT(index == s1.index(i));
 
   82                BEAST_EXPECT(s1.valid(i));
 
   83                s1.val[index] = 
makeJson(
"value", primes[i]);
 
   84                productAllVersions *= primes[i];
 
   86            BEAST_EXPECT(!s1.valid(0));
 
  102                    unsigned int version,
 
  107                    if (BEAST_EXPECT(
json.isMember(
"value")))
 
  109                        *result *= 
json[
"value"].asInt();
 
  121                    BEAST_EXPECT(s1.val[s1.index(version)] == json);
 
  122                    if (BEAST_EXPECT(json.isMember(
"value")))
 
  124                        BEAST_EXPECT(json[
"value"].asInt() == primes[version]);
 
  133                    unsigned int version,
 
  138                    if (BEAST_EXPECT(
json.isMember(
"value")))
 
  140                        *result *= 
json[
"value"].asInt();
 
  145            BEAST_EXPECT(result == productAllVersions);
 
  148            static_assert([](
auto&& v) {
 
  155            static_assert([](
auto&& v) {
 
  162            static_assert([](
auto&& v) {
 
  169            static_assert([](
auto&& v) {
 
  177            static_assert([](
auto&& v) {
 
  185            static_assert([](
auto&& v) {
 
  189                        [](
auto, 
auto, 
char const*) {},
 
  195            static_assert([](
auto&& v) {
 
  202            static_assert([](
auto&& v) {
 
  209            static_assert([](
auto&& v) {
 
  216            static_assert([](
auto&& v) {
 
  223            static_assert([](
auto&& v) {
 
  232            static_assert([](
auto&& v) {
 
  236                        []<
unsigned int Version>(
 
  245            static_assert([](
auto&& v) {
 
  252            static_assert([](
auto&& v) {
 
  262            testcase(
"default copy construction / assignment");
 
  266            BEAST_EXPECT(x.val.size() == subject.val.size());
 
  267            BEAST_EXPECT(x.val[0] == subject.val[0]);
 
  268            BEAST_EXPECT(x.val[1] == subject.val[1]);
 
  269            BEAST_EXPECT(x.val[2] == subject.val[2]);
 
  270            BEAST_EXPECT(x.val == subject.val);
 
  271            BEAST_EXPECT(&x.val[0] != &subject.val[0]);
 
  272            BEAST_EXPECT(&x.val[1] != &subject.val[1]);
 
  273            BEAST_EXPECT(&x.val[2] != &subject.val[2]);
 
  278            BEAST_EXPECT(y.
val == subject.val);
 
  279            BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
 
  280            BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
 
  281            BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
 
  284            BEAST_EXPECT(y.
val == subject.val);
 
  285            BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
 
  286            BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
 
  287            BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
 
  295            BEAST_EXPECT(x.val[0].isMember(
"name1"));
 
  296            BEAST_EXPECT(x.val[1].isMember(
"name1"));
 
  297            BEAST_EXPECT(x.val[0][
"name1"].isInt());
 
  298            BEAST_EXPECT(x.val[1][
"name1"].isInt());
 
  299            BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
 
  300            BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
 
  302            x.set(
"name2", 
"bar");
 
  303            BEAST_EXPECT(x.val[0].isMember(
"name2"));
 
  304            BEAST_EXPECT(x.val[1].isMember(
"name2"));
 
  305            BEAST_EXPECT(x.val[0][
"name2"].isString());
 
  306            BEAST_EXPECT(x.val[1][
"name2"].isString());
 
  307            BEAST_EXPECT(x.val[0][
"name2"].asString() == 
"bar");
 
  308            BEAST_EXPECT(x.val[1][
"name2"].asString() == 
"bar");
 
  311            static_assert([](
auto&& v) {
 
  314            static_assert([](
auto&& v) {
 
  315                return requires { v.set(
"name", 
"value"); };
 
  318                [](
auto&& v) { 
return requires { v.set(
"name", 
true); }; }(x));
 
  320                [](
auto&& v) { 
return requires { v.set(
"name", 42); }; }(x));
 
  326            static_assert([](
auto&& v) {
 
  327                return !
requires { v.set(
"name", foo_t{}); };
 
  329            static_assert([](
auto&& v) {
 
  338            BEAST_EXPECT(subject.isMember(
"foo") == 
decltype(subject)
::none);
 
  342                MultiApiJson<1, 2> s1{};
 
  345                BEAST_EXPECT(s1.isMember(
"One") == 
decltype(s1)
::all);
 
  346                BEAST_EXPECT(s1.isMember(
"Two") == 
decltype(s1)
::none);
 
  351                MultiApiJson<1, 2> s2{};
 
  354                BEAST_EXPECT(s2.isMember(
"One") == 
decltype(s2)
::some);
 
  355                BEAST_EXPECT(s2.isMember(
"Two") == 
decltype(s2)
::some);
 
  360                MultiApiJson<1, 3> s3{};
 
  363                BEAST_EXPECT(s3.isMember(
"One") == 
decltype(s3)
::some);
 
  364                BEAST_EXPECT(s3.isMember(
"Two") == 
decltype(s3)
::none);
 
  371            MultiApiJson<1, 3> s1{};
 
  376            BEAST_EXPECT(not s1.valid(0));
 
  377            BEAST_EXPECT(s1.index(0) == 0);
 
  379            BEAST_EXPECT(s1.valid(1));
 
  380            BEAST_EXPECT(s1.index(1) == 0);
 
  382            BEAST_EXPECT(not s1.valid(4));
 
  385            static_assert([](
auto&& v) {
 
  400                           std::integral_constant<unsigned, 1>) {
 
  401                            return v[
"value"].asInt();
 
  404                        [](
auto, 
auto) { return 0; }}) == 2);
 
  406            static_assert([](
auto&& v) {
 
  419                        [](Json::Value& v) { return v[
"value"].asInt(); },
 
  421                        [](
auto...) { return 0; }}) == 2);
 
  423            static_assert([](
auto&& v) {
 
  437                        [](Json::Value const& v,
 
  438                           std::integral_constant<unsigned, 2>) {
 
  439                            return v[
"value"].asInt();
 
  442                        [](
auto, 
auto) { return 0; }}) == 3);
 
  444            static_assert([](
auto&& v) {
 
  457                        [](Json::Value const& v) { return v[
"value"].asInt(); },
 
  459                        [](
auto...) { return 0; }}) == 3);
 
  461            static_assert([](
auto&& v) {
 
  471                        [](Json::Value& v, unsigned) {
 
  472                            return v[
"value"].asInt();
 
  475                        [](
auto, 
auto) { return 0; }}) == 5);
 
  477            static_assert([](
auto&& v) {
 
  478                return requires { v.visitor(v, 1, [](
Json::Value&) {}); };
 
  485                        [](Json::Value& v) { return v[
"value"].asInt(); },
 
  487                        [](
auto...) { return 0; }}) == 5);
 
  489            static_assert([](
auto&& v) {
 
  491                    v.visitor(v, 1, [](
Json::Value const&, 
unsigned) {});
 
  499                        [](Json::Value const& v, unsigned) {
 
  500                            return v[
"value"].asInt();
 
  503                        [](
auto, 
auto) { return 0; }}) == 3);
 
  505            static_assert([](
auto&& v) {
 
  506                return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
 
  513                        [](Json::Value const& v) { return v[
"value"].asInt(); },
 
  515                        [](
auto...) { return 0; }}) == 3);
 
  523                        return v[
"value"].asInt();
 
  530                        return v[
"value"].asInt();
 
  537                        return v[
"value"].asInt();
 
  543                    [](
Json::Value const& v) { return v[
"value"].asInt(); }) ==
 
  549                    [](
Json::Value& v, 
long) { return v[
"value"].asInt(); }) ==
 
  556                        return v[
"value"].asInt();
 
  563                        return v[
"value"].asInt();
 
  569                    [](
auto& v, 
auto) { return v[
"value"].asInt(); }) == 3);
 
  574                    [](
auto const& v, 
auto) { return v[
"value"].asInt(); }) ==
 
  580                    [](
auto& v) { return v[
"value"].asInt(); }) == 3);
 
  585                    [](
auto const& v) { return v[
"value"].asInt(); }) == 3);
 
  593                        return ver * a1 * a2 * v[
"value"].asInt();
 
  596                    7) == 2 * 5 * 7 * 3);
 
  602                        return ver * (1 * ... * args) * v[
"value"].asInt();
 
  605                    7) == 2 * 5 * 7 * 3);
 
  608            static_assert([](
auto&& v) {
 
  617            static_assert([](
auto&& v) {
 
  626            static_assert([](
auto&& v) {
 
  635            static_assert([](
auto&& v) {
 
  645            static_assert([](
auto&& v) {
 
  646                return requires { v.visitor(v, 1, [](
auto) {}); };
 
  649            static_assert([](
auto&& v) {
 
  650                return requires { v.visitor(v, 1, [](
Json::Value&) {}); };
 
  653            static_assert([](
auto&& v) {
 
  659            static_assert([](
auto&& v) {
 
  660                return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
 
  663            static_assert([](
auto&& v) {
 
  665                    v.visitor(v, 1, [](
Json::Value const&, 
auto...) {});
 
  669            static_assert([](
auto&& v) {
 
  670                return requires { v.visitor(v, 1, [](
auto...) {}); };
 
  673            static_assert([](
auto&& v) {
 
  674                return requires { v.visitor(v, 1, [](
auto, 
auto...) {}); };
 
  677            static_assert([](
auto&& v) {
 
  679                    v.visitor(v, 1, [](
auto, 
auto, 
auto...) {});
 
  683            static_assert([](
auto&& v) {
 
  685                    v.visitor(v, 1, [](
auto, 
auto, 
auto...) {}, 
"");
 
  689            static_assert([](
auto&& v) {
 
  691                    v.visitor(v, 1, [](
auto, 
auto, 
auto, 
auto...) {}, 
"");
 
  699            MultiApiJson<1, 3> s1{};
 
  700            s1.val[0] = makeJson(
"value", 2);
 
  701            s1.val[1] = makeJson(
"value", 3);
 
  702            s1.val[2] = makeJson(
"value", 5);
 
  705            static_assert([](
auto&& v) {
 
  718                           std::integral_constant<unsigned, 1>) {
 
  719                            return v[
"value"].asInt();
 
  722                        [](
auto, 
auto) { return 0; }}) == 2);
 
  723            static_assert([](
auto&& v) {
 
  736                           std::integral_constant<unsigned, 1>) {
 
  737                            return v[
"value"].asInt();
 
  740                        [](
auto, 
auto) { return 0; }}) == 2);
 
  742            static_assert([](
auto&& v) {
 
  753                        [](Json::Value& v) { return v[
"value"].asInt(); },
 
  755                        [](
auto...) { return 0; }}) == 2);
 
  756            static_assert([](
auto&& v) {
 
  767                        [](Json::Value& v) { return v[
"value"].asInt(); },
 
  769                        [](
auto...) { return 0; }}) == 2);
 
  771            static_assert([](
auto&& v) {
 
  785                            return v[
"value"].
asInt();
 
  788                        [](
auto, 
auto) { 
return 0; }}) == 3);
 
  789            static_assert([](
auto&& v) {
 
  803                            return v[
"value"].
asInt();
 
  806                        [](
auto, 
auto) { 
return 0; }}) == 3);
 
  808            static_assert([](
auto&& v) {
 
  819                        [](
Json::Value const& v) { 
return v[
"value"].asInt(); },
 
  821                        [](
auto...) { 
return 0; }}) == 3);
 
  822            static_assert([](
auto&& v) {
 
  833                        [](
Json::Value const& v) { 
return v[
"value"].asInt(); },
 
  835                        [](
auto...) { 
return 0; }}) == 3);
 
  837            static_assert([](
auto&& v) {
 
  838                return requires { v.visit(1, [](
Json::Value&, 
unsigned) {}); };
 
  844                        [](Json::Value& v, unsigned) {
 
  845                            return v[
"value"].asInt();
 
  849                        [](
auto, 
auto) { return 0; }}) == 5);
 
  850            static_assert([](
auto&& v) {
 
  859                        [](Json::Value& v, unsigned) {
 
  860                            return v[
"value"].asInt();
 
  864                        [](
auto, 
auto) { return 0; }}) == 5);
 
  866            static_assert([](
auto&& v) {
 
  867                return requires { v.visit(1, [](
Json::Value&) {}); };
 
  873                        [](Json::Value& v) { return v[
"value"].asInt(); },
 
  875                        [](
auto...) { return 0; }}) == 5);
 
  876            static_assert([](
auto&& v) {
 
  877                return requires { v.visit()(1, [](
Json::Value&) {}); };
 
  883                        [](Json::Value& v) { return v[
"value"].asInt(); },
 
  885                        [](
auto...) { return 0; }}) == 5);
 
  887            static_assert([](
auto&& v) {
 
  897                            return v[
"value"].
asInt();
 
  901                        [](
auto, 
auto) { 
return 0; }}) == 3);
 
  902            static_assert([](
auto&& v) {
 
  912                            return v[
"value"].
asInt();
 
  916                        [](
auto, 
auto) { 
return 0; }}) == 3);
 
  918            static_assert([](
auto&& v) {
 
  919                return requires { v.visit(1, [](
Json::Value const&) {}); };
 
  925                        [](
Json::Value const& v) { 
return v[
"value"].asInt(); },
 
  927                        [](
auto...) { 
return 0; }}) == 3);
 
  928            static_assert([](
auto&& v) {
 
  929                return requires { v.visit()(1, [](
Json::Value const&) {}); };
 
  935                        [](
Json::Value const& v) { 
return v[
"value"].asInt(); },
 
  937                        [](
auto...) { 
return 0; }}) == 3);
 
  940            static_assert([](
auto&& v) {
 
  945            static_assert([](
auto&& v) {
 
  951            static_assert([](
auto&& v) {
 
  956            static_assert([](
auto&& v) {
 
  962            static_assert([](
auto&& v) {
 
  968            static_assert([](
auto&& v) {
 
  974            static_assert([](
auto&& v) {
 
  980            static_assert([](
auto&& v) {
 
  986            static_assert([](
auto&& v) {
 
  992            static_assert([](
auto&& v) {
 
  998            static_assert([](
auto&& v) {
 
 1004            static_assert([](
auto&& v) {
 
 1012            static_assert([](
auto&& v) {
 
 1018            static_assert([](
auto&& v) {
 
 1026            static_assert([](
auto&& v) {
 
 1031            static_assert([](
auto&& v) {
 
 1038            static_assert([](
auto&& v) {
 
 1043            static_assert([](
auto&& v) {