> Hmm... that's disappointing :( nothing was generated. Function templates are not functions, they are templates of functions, they will not generate any code unless they are instantiated.
> then again. I've noticed that you've changed pointers to indices. No, I changed pointers to a template type parameter named Iter. Which is meant to correspond to the C++ iterator interface. Pointers satisfy all of iterators requirements, and classes that satisfy those requirements (by implementing similar semantics to pointers) are also iterators. > Or may be C++ does a different thing with [object++], then > what plain-c does with [variable++]? That's correct, C++ has operator overloading, which allows you to define member functions for classes that are called when the corresponding operator is used. In this case, operator++ (in the imaginary implementation) is overloaded to go to the next element of the linked list. The iterator interface requires operator++ to be overloaded, and should implement similar semantics to using operator++ on a pointer. > I's hard to analyze code without basic knowledge of the language :( Yes, I personally recommend learncpp as a resource for learning C++, that would aid you greatly. C++ is a large language, you would need to invest some time into it to become proficient, in my opinion that investment is hugely worth it though. > I only hoped that the problem could be > recognized and may be would inspire some developers out there Unfortunately, I strongly agree with JWakely that what you requested belongs in library rather than in language additions. If implementing it is too much of a burden (which is understandable since you have no prior experience with C++) then I would suggest checking out Boost to see if they have what you need. I seem to recall them having some sort of fancy pointers in there somewhere. Realistically though, it will take some time to get used to all the C++isms before you would be able to be proficient with anything Boost would provide. I don't mean to be discouraging, I just want to keep your expectations realistic, the learning curve for C++ can be rather high, especially when you're used to C. Good luck! -Alex Sent with Proton Mail secure email. ------- Original Message ------- On Wednesday, June 28th, 2023 at 6:43 AM, Rafał Pietrak <embed...@ztk-rp.eu> wrote: > Hi Alex, > > W dniu 28.06.2023 o 11:56, waffl3x pisze: > > > Here's a quick and dirty example of how this function could be rewritten > > with > > modern C++. I omitted some necessary details, particularly the > > implementation of the > > linked list iterator. I also wrote it out quickly so I can't be certain > > it's 100% > > correct, but it should give you an idea of whats possible. > > > trying.... > > > // I assume you meant to return a pointer > > template<typename Iter> > > auto test_funct(Iter iter, Iter end, char opt) { > > for (; iter != end; ++iter) { > > // dereferencing iter would get buff > > if (!*iter) { *iter = opt; break; } > > } > > return iter; > > } > > -------------------------- TEST.CPP is the above code > $ g++ -fpermissive -c test.cpp > > > > no error, GOOD :) > > $ g++ -fpermissive -S test.cpp > $ cat test.s > .file "test.cpp" > .text > .ident "GCC: (Debian 12.2.0-14) 12.2.0" > .section .note.GNU-stack,"",@progbits > ---------------end-of-file---------- > > Hmm... that's disappointing :( nothing was generated. > > then again. I've noticed that you've changed pointers to indices. I've > pondered that for my implementation too but discarded the idea for it > will require adjustments by struct-size (array element size) on every > access.... Or may be C++ does a different thing with [object++], then > what plain-c does with [variable++]? > > I's hard to analyze code without basic knowledge of the language :( > > > I also made an example using the C++ algorithms library. > > > > template<typename Iter> > > auto test_funct(Iter begin, Iter end, char opt) { > > auto iter = std::find_if(begin, end, [](auto buff){return !buff;}); > > if (iter) { > > *iter = opt; > > } > > return iter; > > } > > > here I got: > test2.cpp:3:22: error: ‘find_if’ is not a member of ‘std’ > so, it's a nogo for me either. > > > As I said, there's quite a bit omitted here, to be blunt, implementing both > > the fancy pointers (especially when I don't know anything about the > > hardware) and > > the iterators required would be more of a task than I am willing to do. I'm > > happy > > to help but I don't think I should be doing unpaid labor :). > > > Fair enough. > > [---------] > > > I'm happy to answer more questions and help, however I'm concerned this is > > getting fairly unrelated to GCC. > > > From my perspective it is related to GCC (well... ok, to CC in general > - it "smells" like an extention to "C-standard" providing additional > "funny" semantics to CC. But GCC is a "front-runner" for CC evolution, > right? :). > > Then again. I'm not into drawing anybody into unfruitful and pointless > support (for my little project). I only hoped that the problem could be > recognized and may be would inspire some developers out there (as it > would be silly for me, if I thought its implementation into GCC could > happen before my small project ends, right?). > > Anyway, thanx for the hints and suggestions. > > -R