How to use an initializer_list to create a C++ of structures?









up vote
1
down vote

favorite












The following code works as expected to initialize a vector of structs:



#include <array>
struct node

std::string name;
std::string value;
;

const std::vector<node> reqFields (
"query", tmpEmail ,
"firstname", firstName ,
"lastname", lastName
);


I want to optimize my code a bit to use a C++ 11 array instead, given that my data is static. However, the following won't compile:



const std::array<node, 3>(
"query", tmpEmail ,
"firstname", firstName ,
"lastname", lastName
);


What is the right syntax to initialize the array? or maybe this is something that Visual Studio 15 has trouble with?










share|improve this question



























    up vote
    1
    down vote

    favorite












    The following code works as expected to initialize a vector of structs:



    #include <array>
    struct node

    std::string name;
    std::string value;
    ;

    const std::vector<node> reqFields (
    "query", tmpEmail ,
    "firstname", firstName ,
    "lastname", lastName
    );


    I want to optimize my code a bit to use a C++ 11 array instead, given that my data is static. However, the following won't compile:



    const std::array<node, 3>(
    "query", tmpEmail ,
    "firstname", firstName ,
    "lastname", lastName
    );


    What is the right syntax to initialize the array? or maybe this is something that Visual Studio 15 has trouble with?










    share|improve this question

























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      The following code works as expected to initialize a vector of structs:



      #include <array>
      struct node

      std::string name;
      std::string value;
      ;

      const std::vector<node> reqFields (
      "query", tmpEmail ,
      "firstname", firstName ,
      "lastname", lastName
      );


      I want to optimize my code a bit to use a C++ 11 array instead, given that my data is static. However, the following won't compile:



      const std::array<node, 3>(
      "query", tmpEmail ,
      "firstname", firstName ,
      "lastname", lastName
      );


      What is the right syntax to initialize the array? or maybe this is something that Visual Studio 15 has trouble with?










      share|improve this question















      The following code works as expected to initialize a vector of structs:



      #include <array>
      struct node

      std::string name;
      std::string value;
      ;

      const std::vector<node> reqFields (
      "query", tmpEmail ,
      "firstname", firstName ,
      "lastname", lastName
      );


      I want to optimize my code a bit to use a C++ 11 array instead, given that my data is static. However, the following won't compile:



      const std::array<node, 3>(
      "query", tmpEmail ,
      "firstname", firstName ,
      "lastname", lastName
      );


      What is the right syntax to initialize the array? or maybe this is something that Visual Studio 15 has trouble with?







      c++ c++11 visual-c++






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 10 at 0:04









      Shafik Yaghmour

      123k23309511




      123k23309511










      asked Nov 9 at 23:56









      ferchor2003

      636




      636






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          2
          down vote



          accepted










          std::vector has a constructor that takes initializer_list :



          vector( std::initializer_list<T> init,
          const Allocator& alloc = Allocator() );


          but std::array is an aggregate and follows the rules of aggregate initialization .



          So you need to switch from () to



          const std::array<node, 3> reqFields 
          "query", "tmp" ,
          "firstname", "firstName" ,
          "lastname", "lastName"
          ;


          see it live on godbolt.






          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













             

            draft saved


            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53234758%2fhow-to-use-an-initializer-list-to-create-a-c-array-of-structures%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            2
            down vote



            accepted










            std::vector has a constructor that takes initializer_list :



            vector( std::initializer_list<T> init,
            const Allocator& alloc = Allocator() );


            but std::array is an aggregate and follows the rules of aggregate initialization .



            So you need to switch from () to



            const std::array<node, 3> reqFields 
            "query", "tmp" ,
            "firstname", "firstName" ,
            "lastname", "lastName"
            ;


            see it live on godbolt.






            share|improve this answer


























              up vote
              2
              down vote



              accepted










              std::vector has a constructor that takes initializer_list :



              vector( std::initializer_list<T> init,
              const Allocator& alloc = Allocator() );


              but std::array is an aggregate and follows the rules of aggregate initialization .



              So you need to switch from () to



              const std::array<node, 3> reqFields 
              "query", "tmp" ,
              "firstname", "firstName" ,
              "lastname", "lastName"
              ;


              see it live on godbolt.






              share|improve this answer
























                up vote
                2
                down vote



                accepted







                up vote
                2
                down vote



                accepted






                std::vector has a constructor that takes initializer_list :



                vector( std::initializer_list<T> init,
                const Allocator& alloc = Allocator() );


                but std::array is an aggregate and follows the rules of aggregate initialization .



                So you need to switch from () to



                const std::array<node, 3> reqFields 
                "query", "tmp" ,
                "firstname", "firstName" ,
                "lastname", "lastName"
                ;


                see it live on godbolt.






                share|improve this answer














                std::vector has a constructor that takes initializer_list :



                vector( std::initializer_list<T> init,
                const Allocator& alloc = Allocator() );


                but std::array is an aggregate and follows the rules of aggregate initialization .



                So you need to switch from () to



                const std::array<node, 3> reqFields 
                "query", "tmp" ,
                "firstname", "firstName" ,
                "lastname", "lastName"
                ;


                see it live on godbolt.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 10 at 13:36

























                answered Nov 10 at 0:00









                Shafik Yaghmour

                123k23309511




                123k23309511



























                     

                    draft saved


                    draft discarded















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53234758%2fhow-to-use-an-initializer-list-to-create-a-c-array-of-structures%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Use pre created SQLite database for Android project in kotlin

                    Darth Vader #20

                    Ondo