A few weeks ago Gynvael Coldwind announced a contest (I’m sorry, the link is in Polish) related to his excellent OS dev streams (again, in Polish, but if you do understand it, definitely consider watching them). The task was simple: make a BIOS-bootable diskette image with the prettiest graphical effect; all in 16-bit text mode, with binary size limit of 512 bytes.
Category: Programming
An erase/remove idiom gotcha
I was investigating a crash in my application recently. Despite working in the production environment, I was able to launch the debug version in a debugger (yay). Soon enough, I got a promising SIGSEGV in the expression implementing the erase-remove idiom:
vec.erase(std::remove_if(vec.begin(), vec.end(), [&orig](auto const& msg){ return orig.id == msg.id; })); |
Can you spot the bug already?
How to tell if a fraction can be finitely represented in binary (or any other base)
If you found this post, something has gone wrong, it should be accessible by a direct link only (like unlisted youtube videos). I would like to apologize to all professional mathematicians reading this for my clumsy approach to explaining the subject. I really am doing my best. It is often said that one cannot represent …
Code doodles #3 – significant parentheses, C++14 style
Hello, everyone. It has been a while since my last post.
While watching CppCon 2014 I found this little gem being described by Scott Meyers.
Consider the following code:
decltype(auto) foo() { static int Foo; return Foo; } decltype(auto) bar() { static int Bar; return (Bar); } int main() { decltype(auto) a = foo(); decltype(auto) b = bar(); a++; b++; cout << foo() << ", " << bar() << endl; } |
Would you expect this to print 0, 0? Well, not so fast. decltype(auto) is just a nicer syntax for decltype(name), where name is “unparenthesized id-expression or an unparenthesized class member access”, as described here. Therefore it follows the same rules.
That’s another corner case to remember, but I guess it could also make a nifty party trick, if one can find the right party.
Code Doodles #2 – the quirky switch
According to grammar rules defined by the C++ standard (and C as well) the following code is valid:
switch(i) i++; |