[1] Another workaround for MSVC

Without the added parenthesis, MSVC confuses the definition (it somehow reads is_bidirectional_iterator instead of is_random_access_iterator), which then can't possibly match to a declaration.
[1] More workarounds for MSVC

- Replace uses of __typeof__ with decltype in tests cases (decltype defaults to __typeof__ if not supported)
- Without the added parenthesis in <deque>, MSVC confuses the definition (it somehow reads is_bidirectional_iterator instead of is_random_access_iterator), which then can't possibly match to a declaration
- Avoid defining const static members in source files, MSVC doesn't do the right thing and triggers some redefinition errors (a possibly better workaround is to resort to fake-templates to have the linker keep a single definition around)
- Another redefinition error happens in error_category, suppress it for now (needs investigating)