Idomatic way to prevent slicing? The 2019 Stack Overflow Developer Survey Results Are InForce function to be called only with specific typesWhat's the best way to trim std::string?What is object slicing?What's the point of g++ -Wreorder?Easiest way to convert int to string in C++Does the C++ spec allow an instance of a non-virtual class to include memory for a vtable pointer?capture variables inside of subclass?Detecting if a type can be derived from in C++C++ overload function by return typeIs using inline classes inside a function permitted to be used as template types?Short-circuit evaluation and assignment in C++

I looked up a future colleague on linkedin before I started a job. I told my colleague about it and he seemed surprised. Should I apologize?

Springs with some finite mass

Did USCIS resume its biometric service for UK visa

Monty Hall variation

Which Sci-Fi work first showed weapon of galactic-scale mass destruction?

Is "plugging out" electronic devices an American expression?

Should I use my personal or workplace e-mail when registering to external websites for work purpose?

Dual Citizen. Exited the US on Italian passport recently

What is this 4-propeller plane?

Fractional alignment

Inline version of a function returns different value then non-inline version

"To split hairs" vs "To be pedantic"

Geography at the pixel level

Is domain driven design an anti-SQL pattern?

Is this food a bread or a loaf?

Spanish for "widget"

What is the motivation for a law requiring 2 parties to consent for recording a conversation

What is the best strategy for white in this position?

Is it possible for the two major parties in the UK to form a coalition with each other instead of a much smaller party?

How to manage monthly salary

What does "rabbited" mean/imply in this sentence?

Why don't Unix/Linux systems traverse through directories until they find the required version of a linked library?

aging parents with no investments

Are there any other methods to apply to solving simultaneous equations?



Idomatic way to prevent slicing?



The 2019 Stack Overflow Developer Survey Results Are InForce function to be called only with specific typesWhat's the best way to trim std::string?What is object slicing?What's the point of g++ -Wreorder?Easiest way to convert int to string in C++Does the C++ spec allow an instance of a non-virtual class to include memory for a vtable pointer?capture variables inside of subclass?Detecting if a type can be derived from in C++C++ overload function by return typeIs using inline classes inside a function permitted to be used as template types?Short-circuit evaluation and assignment in C++



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








6















Sometimes it can be an annoyance that c++ defaults to allow slicing. For example



#include <iostream>
struct foo int a; ;
struct bar : foo int b; ;

int main()
bar x1,2;
foo y = x; // <- I dont want this to compile!



This compiles and runs as expected! Though, what if I dont want to enable slicing?



What is the idomatic way to write foo such that one cannot slice instances of any derived class?










share|improve this question






























    6















    Sometimes it can be an annoyance that c++ defaults to allow slicing. For example



    #include <iostream>
    struct foo int a; ;
    struct bar : foo int b; ;

    int main()
    bar x1,2;
    foo y = x; // <- I dont want this to compile!



    This compiles and runs as expected! Though, what if I dont want to enable slicing?



    What is the idomatic way to write foo such that one cannot slice instances of any derived class?










    share|improve this question


























      6












      6








      6


      1






      Sometimes it can be an annoyance that c++ defaults to allow slicing. For example



      #include <iostream>
      struct foo int a; ;
      struct bar : foo int b; ;

      int main()
      bar x1,2;
      foo y = x; // <- I dont want this to compile!



      This compiles and runs as expected! Though, what if I dont want to enable slicing?



      What is the idomatic way to write foo such that one cannot slice instances of any derived class?










      share|improve this question
















      Sometimes it can be an annoyance that c++ defaults to allow slicing. For example



      #include <iostream>
      struct foo int a; ;
      struct bar : foo int b; ;

      int main()
      bar x1,2;
      foo y = x; // <- I dont want this to compile!



      This compiles and runs as expected! Though, what if I dont want to enable slicing?



      What is the idomatic way to write foo such that one cannot slice instances of any derived class?







      c++ inheritance object-slicing






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 1 hour ago







      user463035818

















      asked 1 hour ago









      user463035818user463035818

      18.7k42970




      18.7k42970






















          3 Answers
          3






          active

          oldest

          votes


















          8














          I'm not sure if there is a named idiom for it but you can add a deleted function to the overload set that is a better match then the base classes slicing operations. If you change foo to



          struct foo 

          int a;
          foo() = default; // you have to add this because of the template constructor

          template<typename T>
          foo(const T&) = delete; // error trying to copy anything but a foo

          template<typename T>
          foo& operator=(const T&) = delete; // error assigning anything else but a foo
          ;


          then you can only ever copy construct or copy assign a foo to foo. Any other type will pick the function template and you'll get an error about using a deleted function. This does mean that your class, and the classes that use it can no longer be an aggregate though. Since the members that are added are templates, they are not considered copy constructors or copy assignment operators so you'll get the default copy and move constructors and assignment operators.






          share|improve this answer

























          • If I'm not mistaken, the default copy constructor is not necessary.

            – geza
            1 hour ago











          • @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

            – NathanOliver
            1 hour ago











          • Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

            – eerorika
            56 mins ago











          • if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

            – user463035818
            53 mins ago






          • 1





            I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

            – NathanOliver
            50 mins ago



















          3














          You can prevent the base from being copied outside of member functions of derived classes and the base itself by declaring the copy constructor protected:



          struct foo 
          // ...
          protected:
          foo(foo&) = default;
          ;





          share|improve this answer


















          • 3





            but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

            – user463035818
            1 hour ago


















          2














          Since 2011, the idiomatic way has been to use auto:



          #include <iostream>
          struct foo int a; ;
          struct bar : foo int b; ;

          int main()
          bar x1,2;
          auto y = x; // <- y is a bar



          If you wish to actively prevent slicing, there are a number of ways:



          Usually the most preferable way, unless you specifically need inheritance (you often don't) is to use encapsulation:



          #include <iostream>

          struct foo int a; ;
          struct bar

          bar(int a, int b)
          : foo_(a)
          , b(b)


          int b;

          int get_a() const return foo_.a;

          private:
          foo foo_;
          ;

          int main()
          bar x1,2;
          // foo y = x; // <- does not compile




          Another more specialised way might be to alter the permissions around copy operators:



          #include <iostream>

          struct foo
          int a;
          protected:
          foo(foo const&) = default;
          foo(foo&&) = default;
          foo& operator=(foo const&) = default;
          foo& operator=(foo&&) = default;

          ;

          struct bar : foo

          bar(int a, int b)
          : fooa, bb


          int b;
          ;

          int main()
          auto x = bar (1,2);
          // foo y = x; // <- does not compile






          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',
            autoActivateHeartbeat: false,
            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%2f55600025%2fidomatic-way-to-prevent-slicing%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            8














            I'm not sure if there is a named idiom for it but you can add a deleted function to the overload set that is a better match then the base classes slicing operations. If you change foo to



            struct foo 

            int a;
            foo() = default; // you have to add this because of the template constructor

            template<typename T>
            foo(const T&) = delete; // error trying to copy anything but a foo

            template<typename T>
            foo& operator=(const T&) = delete; // error assigning anything else but a foo
            ;


            then you can only ever copy construct or copy assign a foo to foo. Any other type will pick the function template and you'll get an error about using a deleted function. This does mean that your class, and the classes that use it can no longer be an aggregate though. Since the members that are added are templates, they are not considered copy constructors or copy assignment operators so you'll get the default copy and move constructors and assignment operators.






            share|improve this answer

























            • If I'm not mistaken, the default copy constructor is not necessary.

              – geza
              1 hour ago











            • @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

              – NathanOliver
              1 hour ago











            • Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

              – eerorika
              56 mins ago











            • if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

              – user463035818
              53 mins ago






            • 1





              I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

              – NathanOliver
              50 mins ago
















            8














            I'm not sure if there is a named idiom for it but you can add a deleted function to the overload set that is a better match then the base classes slicing operations. If you change foo to



            struct foo 

            int a;
            foo() = default; // you have to add this because of the template constructor

            template<typename T>
            foo(const T&) = delete; // error trying to copy anything but a foo

            template<typename T>
            foo& operator=(const T&) = delete; // error assigning anything else but a foo
            ;


            then you can only ever copy construct or copy assign a foo to foo. Any other type will pick the function template and you'll get an error about using a deleted function. This does mean that your class, and the classes that use it can no longer be an aggregate though. Since the members that are added are templates, they are not considered copy constructors or copy assignment operators so you'll get the default copy and move constructors and assignment operators.






            share|improve this answer

























            • If I'm not mistaken, the default copy constructor is not necessary.

              – geza
              1 hour ago











            • @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

              – NathanOliver
              1 hour ago











            • Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

              – eerorika
              56 mins ago











            • if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

              – user463035818
              53 mins ago






            • 1





              I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

              – NathanOliver
              50 mins ago














            8












            8








            8







            I'm not sure if there is a named idiom for it but you can add a deleted function to the overload set that is a better match then the base classes slicing operations. If you change foo to



            struct foo 

            int a;
            foo() = default; // you have to add this because of the template constructor

            template<typename T>
            foo(const T&) = delete; // error trying to copy anything but a foo

            template<typename T>
            foo& operator=(const T&) = delete; // error assigning anything else but a foo
            ;


            then you can only ever copy construct or copy assign a foo to foo. Any other type will pick the function template and you'll get an error about using a deleted function. This does mean that your class, and the classes that use it can no longer be an aggregate though. Since the members that are added are templates, they are not considered copy constructors or copy assignment operators so you'll get the default copy and move constructors and assignment operators.






            share|improve this answer















            I'm not sure if there is a named idiom for it but you can add a deleted function to the overload set that is a better match then the base classes slicing operations. If you change foo to



            struct foo 

            int a;
            foo() = default; // you have to add this because of the template constructor

            template<typename T>
            foo(const T&) = delete; // error trying to copy anything but a foo

            template<typename T>
            foo& operator=(const T&) = delete; // error assigning anything else but a foo
            ;


            then you can only ever copy construct or copy assign a foo to foo. Any other type will pick the function template and you'll get an error about using a deleted function. This does mean that your class, and the classes that use it can no longer be an aggregate though. Since the members that are added are templates, they are not considered copy constructors or copy assignment operators so you'll get the default copy and move constructors and assignment operators.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 1 hour ago

























            answered 1 hour ago









            NathanOliverNathanOliver

            98.4k16138217




            98.4k16138217












            • If I'm not mistaken, the default copy constructor is not necessary.

              – geza
              1 hour ago











            • @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

              – NathanOliver
              1 hour ago











            • Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

              – eerorika
              56 mins ago











            • if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

              – user463035818
              53 mins ago






            • 1





              I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

              – NathanOliver
              50 mins ago


















            • If I'm not mistaken, the default copy constructor is not necessary.

              – geza
              1 hour ago











            • @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

              – NathanOliver
              1 hour ago











            • Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

              – eerorika
              56 mins ago











            • if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

              – user463035818
              53 mins ago






            • 1





              I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

              – NathanOliver
              50 mins ago

















            If I'm not mistaken, the default copy constructor is not necessary.

            – geza
            1 hour ago





            If I'm not mistaken, the default copy constructor is not necessary.

            – geza
            1 hour ago













            @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

            – NathanOliver
            1 hour ago





            @geza Yep. I'd need it if i had added the move operators but removing them gives me the defaults for them all. I've removed them. Thanks.

            – NathanOliver
            1 hour ago













            Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

            – eerorika
            56 mins ago





            Note that this doesn't prevent explicit slicing like this: foo y = static_cast<foo&>(x);. That said, perhaps it's not a problem to OP.

            – eerorika
            56 mins ago













            if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

            – user463035818
            53 mins ago





            if I understand correctly this is a nice way to prevent implicit conversions for function parameters in general

            – user463035818
            53 mins ago




            1




            1





            I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

            – NathanOliver
            50 mins ago






            I look at it as reverse SFINAE. You make the overloads you want to compile, and then add a deleted template stopping everything else.

            – NathanOliver
            50 mins ago














            3














            You can prevent the base from being copied outside of member functions of derived classes and the base itself by declaring the copy constructor protected:



            struct foo 
            // ...
            protected:
            foo(foo&) = default;
            ;





            share|improve this answer


















            • 3





              but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

              – user463035818
              1 hour ago















            3














            You can prevent the base from being copied outside of member functions of derived classes and the base itself by declaring the copy constructor protected:



            struct foo 
            // ...
            protected:
            foo(foo&) = default;
            ;





            share|improve this answer


















            • 3





              but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

              – user463035818
              1 hour ago













            3












            3








            3







            You can prevent the base from being copied outside of member functions of derived classes and the base itself by declaring the copy constructor protected:



            struct foo 
            // ...
            protected:
            foo(foo&) = default;
            ;





            share|improve this answer













            You can prevent the base from being copied outside of member functions of derived classes and the base itself by declaring the copy constructor protected:



            struct foo 
            // ...
            protected:
            foo(foo&) = default;
            ;






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 1 hour ago









            eerorikaeerorika

            89.7k664136




            89.7k664136







            • 3





              but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

              – user463035818
              1 hour ago












            • 3





              but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

              – user463035818
              1 hour ago







            3




            3





            but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

            – user463035818
            1 hour ago





            but then I cannot copy foos anymore :( I'd like to prevent only copying a bar to a foo if possible

            – user463035818
            1 hour ago











            2














            Since 2011, the idiomatic way has been to use auto:



            #include <iostream>
            struct foo int a; ;
            struct bar : foo int b; ;

            int main()
            bar x1,2;
            auto y = x; // <- y is a bar



            If you wish to actively prevent slicing, there are a number of ways:



            Usually the most preferable way, unless you specifically need inheritance (you often don't) is to use encapsulation:



            #include <iostream>

            struct foo int a; ;
            struct bar

            bar(int a, int b)
            : foo_(a)
            , b(b)


            int b;

            int get_a() const return foo_.a;

            private:
            foo foo_;
            ;

            int main()
            bar x1,2;
            // foo y = x; // <- does not compile




            Another more specialised way might be to alter the permissions around copy operators:



            #include <iostream>

            struct foo
            int a;
            protected:
            foo(foo const&) = default;
            foo(foo&&) = default;
            foo& operator=(foo const&) = default;
            foo& operator=(foo&&) = default;

            ;

            struct bar : foo

            bar(int a, int b)
            : fooa, bb


            int b;
            ;

            int main()
            auto x = bar (1,2);
            // foo y = x; // <- does not compile






            share|improve this answer



























              2














              Since 2011, the idiomatic way has been to use auto:



              #include <iostream>
              struct foo int a; ;
              struct bar : foo int b; ;

              int main()
              bar x1,2;
              auto y = x; // <- y is a bar



              If you wish to actively prevent slicing, there are a number of ways:



              Usually the most preferable way, unless you specifically need inheritance (you often don't) is to use encapsulation:



              #include <iostream>

              struct foo int a; ;
              struct bar

              bar(int a, int b)
              : foo_(a)
              , b(b)


              int b;

              int get_a() const return foo_.a;

              private:
              foo foo_;
              ;

              int main()
              bar x1,2;
              // foo y = x; // <- does not compile




              Another more specialised way might be to alter the permissions around copy operators:



              #include <iostream>

              struct foo
              int a;
              protected:
              foo(foo const&) = default;
              foo(foo&&) = default;
              foo& operator=(foo const&) = default;
              foo& operator=(foo&&) = default;

              ;

              struct bar : foo

              bar(int a, int b)
              : fooa, bb


              int b;
              ;

              int main()
              auto x = bar (1,2);
              // foo y = x; // <- does not compile






              share|improve this answer

























                2












                2








                2







                Since 2011, the idiomatic way has been to use auto:



                #include <iostream>
                struct foo int a; ;
                struct bar : foo int b; ;

                int main()
                bar x1,2;
                auto y = x; // <- y is a bar



                If you wish to actively prevent slicing, there are a number of ways:



                Usually the most preferable way, unless you specifically need inheritance (you often don't) is to use encapsulation:



                #include <iostream>

                struct foo int a; ;
                struct bar

                bar(int a, int b)
                : foo_(a)
                , b(b)


                int b;

                int get_a() const return foo_.a;

                private:
                foo foo_;
                ;

                int main()
                bar x1,2;
                // foo y = x; // <- does not compile




                Another more specialised way might be to alter the permissions around copy operators:



                #include <iostream>

                struct foo
                int a;
                protected:
                foo(foo const&) = default;
                foo(foo&&) = default;
                foo& operator=(foo const&) = default;
                foo& operator=(foo&&) = default;

                ;

                struct bar : foo

                bar(int a, int b)
                : fooa, bb


                int b;
                ;

                int main()
                auto x = bar (1,2);
                // foo y = x; // <- does not compile






                share|improve this answer













                Since 2011, the idiomatic way has been to use auto:



                #include <iostream>
                struct foo int a; ;
                struct bar : foo int b; ;

                int main()
                bar x1,2;
                auto y = x; // <- y is a bar



                If you wish to actively prevent slicing, there are a number of ways:



                Usually the most preferable way, unless you specifically need inheritance (you often don't) is to use encapsulation:



                #include <iostream>

                struct foo int a; ;
                struct bar

                bar(int a, int b)
                : foo_(a)
                , b(b)


                int b;

                int get_a() const return foo_.a;

                private:
                foo foo_;
                ;

                int main()
                bar x1,2;
                // foo y = x; // <- does not compile




                Another more specialised way might be to alter the permissions around copy operators:



                #include <iostream>

                struct foo
                int a;
                protected:
                foo(foo const&) = default;
                foo(foo&&) = default;
                foo& operator=(foo const&) = default;
                foo& operator=(foo&&) = default;

                ;

                struct bar : foo

                bar(int a, int b)
                : fooa, bb


                int b;
                ;

                int main()
                auto x = bar (1,2);
                // foo y = x; // <- does not compile







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 1 hour ago









                Richard HodgesRichard Hodges

                56.9k658105




                56.9k658105



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55600025%2fidomatic-way-to-prevent-slicing%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

                    Bett Inhaltsverzeichnis Geschichte | Bettformen | Bettgrößen | Andere Bezeichnungen | Bettenmangel | Betten in der bildenden Kunst | Schlafmedizinische Gesichtspunkte | Siehe auch | Literatur | Weblinks | Einzelnachweise | NavigationsmenüBett, Bettstatt, BettstelleCommons: BettBabybetten: Anwendung, Ausstattungsmerkmale und VergleichskriterienWasserbetten. Vorurteile im TestHapfnNursch10.1007/s11818-012-0584-74006250-8AKS4329276-8

                    Luksemburg Sisukord Nimi | Asend | Loodus | Riigikord | Haldusjaotus | Rahvastik | Riigikaitse | Majandus | Taristu | Ajalugu | Eesti ja Luksemburgi suhted | Haridus | Kultuur | Vaata ka | Viited | Välislingid | Navigeerimismenüü50° N, 6° EÜlevaade Luksemburgi kaitsealadest.Luksemburgi rahvaarv. Statistikaamet.World Bank'i andmebaasÜlevaade Luksemburgi loodusest.Ülevaade Luksemburgi metsadest.Guy Colling. "Red List of the Vascular Plants of Luxembourg." Travaux scientifiques du Musée national d’histoire naturelle Luxembourg. 2005.Luxembourg’s biodiversity at risk.Maailma kahepaiksete andmebaas.Denis Lepage. "Luxembourg." Avibase.Ülevaade temperatuuridest. Luksemburgi meteoroloogiateenistus.Ülevaade Luksemburgist. Euroopa Liidu esinduse koduleht.Système politique. TerritoireÜlevaade Luksemburgi rahvastikust. Luksemburgi statistikaamet.Luksemburgi rahvastik. Luksemburgi statistikaamet.The World FactbookMonique Borsenberger, Paul Dickes. "Religions au Luxembourg. Quelle évolution entre 1999-2008". Luksemburgi statistikaamet. 2011.Luksemburgi peapiiskopkond. Catholic-Hierarchy.Luksemburgi armee koduleht.Luksemburgi armee relvastus.Eesti Välisministeerium.Luksemburgi rahvastik. Luksemburgi statistikaamet.Luksemburgi Eesti Seltsi koduleht.Helen Eelrand. "Raadio, mis muutis maailma." Eesti Päevaleht. 13. märts 2004.Ülevaade Luksemburgi haridussüsteemist.Ülevaade Luksemburgi keskkoolidest.Luksemburgr

                    Valle di Casies Indice Geografia fisica | Origini del nome | Storia | Società | Amministrazione | Sport | Note | Bibliografia | Voci correlate | Altri progetti | Collegamenti esterni | Menu di navigazione46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)Sito istituzionaleAstat Censimento della popolazione 2011 - Determinazione della consistenza dei tre gruppi linguistici della Provincia Autonoma di Bolzano-Alto Adige - giugno 2012Numeri e fattiValle di CasiesDato IstatTabella dei gradi/giorno dei Comuni italiani raggruppati per Regione e Provincia26 agosto 1993, n. 412Heraldry of the World: GsiesStatistiche I.StatValCasies.comWikimedia CommonsWikimedia CommonsValle di CasiesSito ufficialeValle di CasiesMM14870458910042978-6