-
Recent Posts
Recent Comments
Ron on Finding GUID “literals… concrt on Visual Studio : Options to bin… T# on Visual Studio : Options to bin… concrt on Using Lambdas instead of Funct… Gerardo on Using Lambdas instead of Funct… Archives
Categories
Meta
Lectures de chevet d’hier soir
- SG20 Education and Recommended Videos for Teaching C++
In today’s blog, we look at both the newly minted Study Group for education in the C++ Standard Committee. We also look at a small number of conference videos that I recommend teachers consider while they’re waiting for this Study Group to produce usable materials.
by Christopher Di Bella - C++2a Coroutines and dangling references
Today I learned yet another way to generate accidentally dangling references with C++2a Coroutines.
by Arthur O’Dwyer
Posted in Uncategorized
Leave a comment
Bedtime reading
- Surviving Software Dependencies – Software reuse is finally here but comes with risks
“Software dependencies carry with them serious risks that are too often overlooked. The shift to easy, fine-grained software reuse has happened so quickly that we do not yet understand the best practices for choosing and using dependencies effectively, or even for deciding when they are appropriate and when not. The purpose of this article is to raise awareness of the risks and encourage more investigation of solutions.”by Russ Cox who leads the development of the Go programming language at Google, with a current focus on improving the security and reliability of using software dependencies. With Jeff Dean, he created Google Code Search, which let developers grep the world’s public source code. He worked for many years on the
- Write Better Code Faster with Roslyn Analyzers
“FxCop analyzers analyze source code in real time and during compilation, whereas legacy FxCop is a static code analysis and analyzes binary files after build has completed”by Mika Dumont, Program Manager on the .NET and Visual Studio team.
- Using noexcept
“In this post I try to come up with guidelines on how to use noexcept. They are based on C++ Committee papers I was able to collect on the subject, and experts’ replies in discussion groups.”by Andrzej
Posted in Uncategorized
Leave a comment
The code is the documentation
You read/hear that the code should be clear enough to be understood with very little comments. I wholeheartedly agree bu I rarely see code like the one I like to read/write:
// This is less convoluted than what's required for
// std::result_of (deprecated in C++17) or std::invoke_result
using SystemTimer_t = decltype(::SetTimer(HWND{}, UINT_PTR{}, UINT{}, TIMERPROC{}));
or
m_UpdateUserInterfaceTimerID = SetTimer(UpdateUserInterfaceTimerID, (100ms).count(), nullptr);
What do you think?
Posted in C ++
Leave a comment
Usefulness of the override keyword…
I just discovered a bug by adding the override to a bunch of virtual function members of an old MFC based UI class: the 3rd-party base class had a LONG_PTR and not a long as we had in our derived class. The code worked fine on 32-bit but it took me time to understand why it was not on 64-bit…
Posted in C ++, Computers and Internet
Leave a comment
Little helper features in Visual Studio
I have now taken the habit to use those and they help me a lot.
The first one is the breakpoint label: I personally use it to associate my bug ticket number with the corresponding breakpoints. When you work on several tickets at the same time and your code base is big, it does help! This Visual Studio 2013: Working with Breakpoint Labels blog entry details this feature.
The second one is the Bookmark window: you can name bookmarks and group them in folders! This one is even more helpful than the first to me! This Setting Bookmarks in Code page has all the details.
Posted in C ++, C#, Computers and Internet
Leave a comment
Ciao Edge…
When I saw that one could get more Microsoft Reward points by using Edge, I started to give it a try, even if they are many UI Chrome features I missed.
After two weeks, I’m going back to Chrome.
Edge 38.14393.0.0 / EdgeHTML 14.14393 is just too unresponsive, crashing at times. I’ll try again in 6 months…
Posted in Uncategorized
Leave a comment
Bring back decent keyboard support please!
When the Palo Alto Network’s GlobalProtect Gateway Login dialog appears with the Username field pre-populated, why can’t I just start typing right away? Why isn’t the focus already set on the empty Password field?
When Atlatlassion’s SourceTree is displaying a status pane during a git pull, pressing the ESC key doesn’t close the “pane” once it’s done pulling the changes from your remote repository. Sure, the ENTER key does but why not the ESC one?
Most Windows 10 store applications support for keyboard users is abysmal. Last century, pressing F1 was taking you to some help. Try that with any of those applications…
Can you all dedicate a bit of resources to support keyboard lover users?
Thank you.
Posted in Computers and Internet, Uncategorized
Leave a comment
C++ 11 auto keyword
Like Hungarian Notation, spaces versus coma indentation, open curly brace position, etc… the usage of the C++ 11 auto keyword, or lack thereof, has a flavor of religious meme.
If you’re in the camp that never uses it, or just with lambdas, or never for built-in types (int, bool, char *, …), can I invite you to follow the related segment of Herb’s excellent Back to the Basics! Essentials of Modern C++ Style talk?
If you’re not yet convinced, acquire or rent the Effective C++ book from Scott Meyers and make sure to read Item 5.
They both make excellent points that show the real values of using auto to declare your variable.Both the video and the book have been available for more than a year and a half now.
I’m telling you, that meme is as strong as the religious one!
Posted in Uncategorized
Leave a comment
Magic Statics
As mentioned in the C++11 Core Language Features Table: Concurrency table, the Magic statics feature is supported under Visual Studio 2015.
Beware that this does not apply to non-local statics (e.g global static variables) and if you’re rightfully concerned about the order of such statics initialization when one depends on the other, a solution is to wrap their access in a static function:
static std::string const & GetString() { static std::string const s{"OperationResult"}; return s; }
The assembly that protects the static is:
; 8 : static std::string const s{"OperationResult"}; mov eax, DWORD PTR __tls_index mov ecx, DWORD PTR fs:__tls_array mov edx, DWORD PTR [ecx+eax*4] mov eax, DWORD PTR ?$TSS0@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@4HA cmp eax, DWORD PTR __Init_thread_epoch[edx] jle SHORT $LN2@GetString push OFFSET ?$TSS0@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@4HA call __Init_thread_header add esp, 4 cmp DWORD PTR ?$TSS0@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@4HA, -1 jne SHORT $LN2@GetString mov DWORD PTR __$EHRec$[ebp+8], 0 push OFFSET ??_C@_0BA@PFGBCHGN@OperationResult?$AA@ mov ecx, OFFSET ?s@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@4V23@B call ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > push OFFSET ??__Fs@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@YAXXZ ; `GetString'::`2'::`dynamic atexit destructor for 's'' call _atexit add esp, 4 mov DWORD PTR __$EHRec$[ebp+8], -1 push OFFSET ?$TSS0@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@4HA call __Init_thread_footer add esp, 4 $LN2@GetString: ; 9 : return s; mov eax, OFFSET ?s@?1??GetString@@YAABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ@4V23@B
Finally, have a look at this nice video: C++ Weekly With Jason Turner – Ep 2 Cost of Using Statics
Posted in Computers and Internet
Leave a comment