Capturing a lambda in another lambda can violate const qualifiersA const std::function wraps a non-const operator() / mutable lambdaC++ nested lambda bug in VS2010 with lambda parameter capture?C++ template allows discard of const reference qualifierPassing capturing lambda as function pointerlambdas: this capture ignores constness (vs std::bind)Why type const double is not captured by lambda from reaching-scope, but const int is?Non mutable lambda function: are copy-captured variables allowed to be const?GCC and Clang disagree about C++17 constexpr lambda capturesCapturing array of vectors in lambda makes elements constC++11 - lambda function pass vector in capture and modify itCopying object into lambda capture

Has a commercial or military jet bi-plane ever been manufactured?

Why do money exchangers give different rates to different bills?

Where can I go to avoid planes overhead?

Upside-Down Pyramid Addition...REVERSED!

Understanding trademark infringements in a world where many dictionary words are trademarks?

Pressure inside an infinite ocean?

I'm in your subnets, golfing your code

Why was the battle set up *outside* Winterfell?

What is the closest airport to the center of the city it serves?

Out of scope work duties and resignation

Can a nothic's Weird Insight action discover secrets about a player character that the character doesn't know about themselves?

Expressing 'our' for objects belonging to our apartment

What does this colon mean? It is not labeling, it is not ternary operator

What does a spell range of "25 ft. + 5 ft./2 levels" mean?

On which topic did Indiana Jones write his doctoral thesis?

What happens if you dump antimatter into a black hole?

Hyperlink on red background

Is there an idiom that support the idea that "inflation is bad"?

Why doesn't WotC use established keywords on all new cards?

Will 700 more planes a day fly because of the Heathrow expansion?

Are there any Final Fantasy Spirits in Super Smash Bros Ultimate?

How to model the curly cable part of the phone

Which module had more 'comfort' in terms of living space, the Lunar Module or the Command module?

What are the differences between credential stuffing and password spraying?



Capturing a lambda in another lambda can violate const qualifiers


A const std::function wraps a non-const operator() / mutable lambdaC++ nested lambda bug in VS2010 with lambda parameter capture?C++ template allows discard of const reference qualifierPassing capturing lambda as function pointerlambdas: this capture ignores constness (vs std::bind)Why type const double is not captured by lambda from reaching-scope, but const int is?Non mutable lambda function: are copy-captured variables allowed to be const?GCC and Clang disagree about C++17 constexpr lambda capturesCapturing array of vectors in lambda makes elements constC++11 - lambda function pass vector in capture and modify itCopying object into lambda capture






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








24















Consider the following code:



int x = 3;
auto f1 = [x]() mutable

return x++;
;
auto f2 = [f1]()

return f1();
;


This will not compile, because f1() is not const, and f2 is not declared as mutable. Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in? Notably, wrapping f1 in std::function seems to resolve this problem (how?).










share|improve this question

















  • 1





    As a side note, that's the case with most of the Rust's functions, where they explicitly accept FnMut (even though in case of e.g. fold it would probably be called with Fn most of the time)

    – Bartek Banachewicz
    Apr 24 at 9:30












  • Possible duplicate of A const std::function wraps a non-const operator() / mutable lambda

    – rustyx
    Apr 24 at 10:01











  • @rustyx thanks, that answers the last point, but not the whole question.

    – riv
    Apr 24 at 10:36






  • 2





    A "lambda violating const qualifiers" sounds like something out of a sci-fi movie.

    – LogicalBranch
    Apr 24 at 17:21

















24















Consider the following code:



int x = 3;
auto f1 = [x]() mutable

return x++;
;
auto f2 = [f1]()

return f1();
;


This will not compile, because f1() is not const, and f2 is not declared as mutable. Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in? Notably, wrapping f1 in std::function seems to resolve this problem (how?).










share|improve this question

















  • 1





    As a side note, that's the case with most of the Rust's functions, where they explicitly accept FnMut (even though in case of e.g. fold it would probably be called with Fn most of the time)

    – Bartek Banachewicz
    Apr 24 at 9:30












  • Possible duplicate of A const std::function wraps a non-const operator() / mutable lambda

    – rustyx
    Apr 24 at 10:01











  • @rustyx thanks, that answers the last point, but not the whole question.

    – riv
    Apr 24 at 10:36






  • 2





    A "lambda violating const qualifiers" sounds like something out of a sci-fi movie.

    – LogicalBranch
    Apr 24 at 17:21













24












24








24


3






Consider the following code:



int x = 3;
auto f1 = [x]() mutable

return x++;
;
auto f2 = [f1]()

return f1();
;


This will not compile, because f1() is not const, and f2 is not declared as mutable. Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in? Notably, wrapping f1 in std::function seems to resolve this problem (how?).










share|improve this question














Consider the following code:



int x = 3;
auto f1 = [x]() mutable

return x++;
;
auto f2 = [f1]()

return f1();
;


This will not compile, because f1() is not const, and f2 is not declared as mutable. Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in? Notably, wrapping f1 in std::function seems to resolve this problem (how?).







c++ lambda






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Apr 24 at 9:20









rivriv

3,68011533




3,68011533







  • 1





    As a side note, that's the case with most of the Rust's functions, where they explicitly accept FnMut (even though in case of e.g. fold it would probably be called with Fn most of the time)

    – Bartek Banachewicz
    Apr 24 at 9:30












  • Possible duplicate of A const std::function wraps a non-const operator() / mutable lambda

    – rustyx
    Apr 24 at 10:01











  • @rustyx thanks, that answers the last point, but not the whole question.

    – riv
    Apr 24 at 10:36






  • 2





    A "lambda violating const qualifiers" sounds like something out of a sci-fi movie.

    – LogicalBranch
    Apr 24 at 17:21












  • 1





    As a side note, that's the case with most of the Rust's functions, where they explicitly accept FnMut (even though in case of e.g. fold it would probably be called with Fn most of the time)

    – Bartek Banachewicz
    Apr 24 at 9:30












  • Possible duplicate of A const std::function wraps a non-const operator() / mutable lambda

    – rustyx
    Apr 24 at 10:01











  • @rustyx thanks, that answers the last point, but not the whole question.

    – riv
    Apr 24 at 10:36






  • 2





    A "lambda violating const qualifiers" sounds like something out of a sci-fi movie.

    – LogicalBranch
    Apr 24 at 17:21







1




1





As a side note, that's the case with most of the Rust's functions, where they explicitly accept FnMut (even though in case of e.g. fold it would probably be called with Fn most of the time)

– Bartek Banachewicz
Apr 24 at 9:30






As a side note, that's the case with most of the Rust's functions, where they explicitly accept FnMut (even though in case of e.g. fold it would probably be called with Fn most of the time)

– Bartek Banachewicz
Apr 24 at 9:30














Possible duplicate of A const std::function wraps a non-const operator() / mutable lambda

– rustyx
Apr 24 at 10:01





Possible duplicate of A const std::function wraps a non-const operator() / mutable lambda

– rustyx
Apr 24 at 10:01













@rustyx thanks, that answers the last point, but not the whole question.

– riv
Apr 24 at 10:36





@rustyx thanks, that answers the last point, but not the whole question.

– riv
Apr 24 at 10:36




2




2





A "lambda violating const qualifiers" sounds like something out of a sci-fi movie.

– LogicalBranch
Apr 24 at 17:21





A "lambda violating const qualifiers" sounds like something out of a sci-fi movie.

– LogicalBranch
Apr 24 at 17:21












2 Answers
2






active

oldest

votes


















21















Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in?




That's a design decision for your library API. You can require client code to pass function objects with a const-qualified operator() (which is the case for non-mutable lambda expressions). If something different is passed, a compiler error is triggered. But if the context might require a function object argument that modifies its state, then yes, you have to make the internal lambda mutable.



An alternative would be to dispatch on the ability to invoke operator() on a const-qualified instance of the given function type. Something along those lines (note that this needs a fix for function objects with both const and non-const operator(), which results in an ambiguity):



template <class Fct>
auto wrap(Fct&& f) -> decltype(f(), void())

[fct = std::forward<Fct>(f)]() mutable fct(); ();


template <class Fct>
auto wrap(Fct&& f) -> decltype(std::declval<const Fct&>()(), void())

[fct = std::forward<Fct>(f)]() fct(); ();




Notably, wrapping f1 in std::function seems to resolve this problem (how?).




This is a bug in std::function due to its type-erasure and copy semantics. It allows non-const-qualified operator() to be invoked, which can be verified with such a snippet:



const std::function<void()> f = [i = 0]() mutable ++i; ;

f(); // Shouldn't be possible, but unfortunately, it is


This is a known issue, it's worth checking out Titus Winter's complaint on this.






share|improve this answer
































    6














    I'll start by addressing your second question first. std::function type erases, and holds a copy of the functor it's initialized with. That means there's a layer of indirection between std::function::operator() and the actual functor's operator().



    Envision if you will, holding something in your class by pointer. Then you may call a mutating operation on the pointee from a const member function of your class, because it doesn't affect (in a shallow view) the pointer that the class holds. This is a similar situation to what you observed.



    As for your first question... "Always" is too strong a word. It depends on your goal.



    1. If you want to support self mutating functors easily, then you should capture in a mutable lambda. But beware it may affect the library functions you may call now.


    2. If you wish to favor non-mutating operations, then a non-mutable lambda. I say "favor" because as we observed, the type system can be "fooled" with an extra level of indirection. So the approach you prefer is only going to be easier to use, not impossible to go around. This is as the sage advice goes, make correct use of your API easy, and incorrect harder.






    share|improve this answer


















    • 1





      Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

      – Max Langhof
      Apr 24 at 9:47












    • Ah, I see it became a hot network post.

      – StoryTeller
      Apr 24 at 10:03











    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%2f55826592%2fcapturing-a-lambda-in-another-lambda-can-violate-const-qualifiers%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    21















    Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in?




    That's a design decision for your library API. You can require client code to pass function objects with a const-qualified operator() (which is the case for non-mutable lambda expressions). If something different is passed, a compiler error is triggered. But if the context might require a function object argument that modifies its state, then yes, you have to make the internal lambda mutable.



    An alternative would be to dispatch on the ability to invoke operator() on a const-qualified instance of the given function type. Something along those lines (note that this needs a fix for function objects with both const and non-const operator(), which results in an ambiguity):



    template <class Fct>
    auto wrap(Fct&& f) -> decltype(f(), void())

    [fct = std::forward<Fct>(f)]() mutable fct(); ();


    template <class Fct>
    auto wrap(Fct&& f) -> decltype(std::declval<const Fct&>()(), void())

    [fct = std::forward<Fct>(f)]() fct(); ();




    Notably, wrapping f1 in std::function seems to resolve this problem (how?).




    This is a bug in std::function due to its type-erasure and copy semantics. It allows non-const-qualified operator() to be invoked, which can be verified with such a snippet:



    const std::function<void()> f = [i = 0]() mutable ++i; ;

    f(); // Shouldn't be possible, but unfortunately, it is


    This is a known issue, it's worth checking out Titus Winter's complaint on this.






    share|improve this answer





























      21















      Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in?




      That's a design decision for your library API. You can require client code to pass function objects with a const-qualified operator() (which is the case for non-mutable lambda expressions). If something different is passed, a compiler error is triggered. But if the context might require a function object argument that modifies its state, then yes, you have to make the internal lambda mutable.



      An alternative would be to dispatch on the ability to invoke operator() on a const-qualified instance of the given function type. Something along those lines (note that this needs a fix for function objects with both const and non-const operator(), which results in an ambiguity):



      template <class Fct>
      auto wrap(Fct&& f) -> decltype(f(), void())

      [fct = std::forward<Fct>(f)]() mutable fct(); ();


      template <class Fct>
      auto wrap(Fct&& f) -> decltype(std::declval<const Fct&>()(), void())

      [fct = std::forward<Fct>(f)]() fct(); ();




      Notably, wrapping f1 in std::function seems to resolve this problem (how?).




      This is a bug in std::function due to its type-erasure and copy semantics. It allows non-const-qualified operator() to be invoked, which can be verified with such a snippet:



      const std::function<void()> f = [i = 0]() mutable ++i; ;

      f(); // Shouldn't be possible, but unfortunately, it is


      This is a known issue, it's worth checking out Titus Winter's complaint on this.






      share|improve this answer



























        21












        21








        21








        Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in?




        That's a design decision for your library API. You can require client code to pass function objects with a const-qualified operator() (which is the case for non-mutable lambda expressions). If something different is passed, a compiler error is triggered. But if the context might require a function object argument that modifies its state, then yes, you have to make the internal lambda mutable.



        An alternative would be to dispatch on the ability to invoke operator() on a const-qualified instance of the given function type. Something along those lines (note that this needs a fix for function objects with both const and non-const operator(), which results in an ambiguity):



        template <class Fct>
        auto wrap(Fct&& f) -> decltype(f(), void())

        [fct = std::forward<Fct>(f)]() mutable fct(); ();


        template <class Fct>
        auto wrap(Fct&& f) -> decltype(std::declval<const Fct&>()(), void())

        [fct = std::forward<Fct>(f)]() fct(); ();




        Notably, wrapping f1 in std::function seems to resolve this problem (how?).




        This is a bug in std::function due to its type-erasure and copy semantics. It allows non-const-qualified operator() to be invoked, which can be verified with such a snippet:



        const std::function<void()> f = [i = 0]() mutable ++i; ;

        f(); // Shouldn't be possible, but unfortunately, it is


        This is a known issue, it's worth checking out Titus Winter's complaint on this.






        share|improve this answer
















        Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in?




        That's a design decision for your library API. You can require client code to pass function objects with a const-qualified operator() (which is the case for non-mutable lambda expressions). If something different is passed, a compiler error is triggered. But if the context might require a function object argument that modifies its state, then yes, you have to make the internal lambda mutable.



        An alternative would be to dispatch on the ability to invoke operator() on a const-qualified instance of the given function type. Something along those lines (note that this needs a fix for function objects with both const and non-const operator(), which results in an ambiguity):



        template <class Fct>
        auto wrap(Fct&& f) -> decltype(f(), void())

        [fct = std::forward<Fct>(f)]() mutable fct(); ();


        template <class Fct>
        auto wrap(Fct&& f) -> decltype(std::declval<const Fct&>()(), void())

        [fct = std::forward<Fct>(f)]() fct(); ();




        Notably, wrapping f1 in std::function seems to resolve this problem (how?).




        This is a bug in std::function due to its type-erasure and copy semantics. It allows non-const-qualified operator() to be invoked, which can be verified with such a snippet:



        const std::function<void()> f = [i = 0]() mutable ++i; ;

        f(); // Shouldn't be possible, but unfortunately, it is


        This is a known issue, it's worth checking out Titus Winter's complaint on this.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 24 at 10:11

























        answered Apr 24 at 9:30









        lubgrlubgr

        16.7k32558




        16.7k32558























            6














            I'll start by addressing your second question first. std::function type erases, and holds a copy of the functor it's initialized with. That means there's a layer of indirection between std::function::operator() and the actual functor's operator().



            Envision if you will, holding something in your class by pointer. Then you may call a mutating operation on the pointee from a const member function of your class, because it doesn't affect (in a shallow view) the pointer that the class holds. This is a similar situation to what you observed.



            As for your first question... "Always" is too strong a word. It depends on your goal.



            1. If you want to support self mutating functors easily, then you should capture in a mutable lambda. But beware it may affect the library functions you may call now.


            2. If you wish to favor non-mutating operations, then a non-mutable lambda. I say "favor" because as we observed, the type system can be "fooled" with an extra level of indirection. So the approach you prefer is only going to be easier to use, not impossible to go around. This is as the sage advice goes, make correct use of your API easy, and incorrect harder.






            share|improve this answer


















            • 1





              Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

              – Max Langhof
              Apr 24 at 9:47












            • Ah, I see it became a hot network post.

              – StoryTeller
              Apr 24 at 10:03















            6














            I'll start by addressing your second question first. std::function type erases, and holds a copy of the functor it's initialized with. That means there's a layer of indirection between std::function::operator() and the actual functor's operator().



            Envision if you will, holding something in your class by pointer. Then you may call a mutating operation on the pointee from a const member function of your class, because it doesn't affect (in a shallow view) the pointer that the class holds. This is a similar situation to what you observed.



            As for your first question... "Always" is too strong a word. It depends on your goal.



            1. If you want to support self mutating functors easily, then you should capture in a mutable lambda. But beware it may affect the library functions you may call now.


            2. If you wish to favor non-mutating operations, then a non-mutable lambda. I say "favor" because as we observed, the type system can be "fooled" with an extra level of indirection. So the approach you prefer is only going to be easier to use, not impossible to go around. This is as the sage advice goes, make correct use of your API easy, and incorrect harder.






            share|improve this answer


















            • 1





              Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

              – Max Langhof
              Apr 24 at 9:47












            • Ah, I see it became a hot network post.

              – StoryTeller
              Apr 24 at 10:03













            6












            6








            6







            I'll start by addressing your second question first. std::function type erases, and holds a copy of the functor it's initialized with. That means there's a layer of indirection between std::function::operator() and the actual functor's operator().



            Envision if you will, holding something in your class by pointer. Then you may call a mutating operation on the pointee from a const member function of your class, because it doesn't affect (in a shallow view) the pointer that the class holds. This is a similar situation to what you observed.



            As for your first question... "Always" is too strong a word. It depends on your goal.



            1. If you want to support self mutating functors easily, then you should capture in a mutable lambda. But beware it may affect the library functions you may call now.


            2. If you wish to favor non-mutating operations, then a non-mutable lambda. I say "favor" because as we observed, the type system can be "fooled" with an extra level of indirection. So the approach you prefer is only going to be easier to use, not impossible to go around. This is as the sage advice goes, make correct use of your API easy, and incorrect harder.






            share|improve this answer













            I'll start by addressing your second question first. std::function type erases, and holds a copy of the functor it's initialized with. That means there's a layer of indirection between std::function::operator() and the actual functor's operator().



            Envision if you will, holding something in your class by pointer. Then you may call a mutating operation on the pointee from a const member function of your class, because it doesn't affect (in a shallow view) the pointer that the class holds. This is a similar situation to what you observed.



            As for your first question... "Always" is too strong a word. It depends on your goal.



            1. If you want to support self mutating functors easily, then you should capture in a mutable lambda. But beware it may affect the library functions you may call now.


            2. If you wish to favor non-mutating operations, then a non-mutable lambda. I say "favor" because as we observed, the type system can be "fooled" with an extra level of indirection. So the approach you prefer is only going to be easier to use, not impossible to go around. This is as the sage advice goes, make correct use of your API easy, and incorrect harder.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Apr 24 at 9:32









            StoryTellerStoryTeller

            107k15225288




            107k15225288







            • 1





              Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

              – Max Langhof
              Apr 24 at 9:47












            • Ah, I see it became a hot network post.

              – StoryTeller
              Apr 24 at 10:03












            • 1





              Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

              – Max Langhof
              Apr 24 at 9:47












            • Ah, I see it became a hot network post.

              – StoryTeller
              Apr 24 at 10:03







            1




            1





            Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

            – Max Langhof
            Apr 24 at 9:47






            Notably, wrapping a passed lambda in std::ref provides the level of indirection that allows mutability even in const contexts. It also gets around the "functors may be copied around in the implementation" if you are after tracking some state.

            – Max Langhof
            Apr 24 at 9:47














            Ah, I see it became a hot network post.

            – StoryTeller
            Apr 24 at 10:03





            Ah, I see it became a hot network post.

            – StoryTeller
            Apr 24 at 10:03

















            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%2f55826592%2fcapturing-a-lambda-in-another-lambda-can-violate-const-qualifiers%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

            Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

            Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

            Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020