Skip to content
Why is a raven like a writing desk?

Thoughts both confusing and enlightening.

Why is a raven like a writing desk?

Thoughts both confusing and enlightening.

VS2010 woes: tuples as map keys

elbeno, 20 February, 201530 June, 2015

Another day, another compiler/library bug. If you’re unfortunate enough to still be using Visual Studio 2010, don’t use tuples as map keys.

#include 
#include 
#include 

using namespace std;

typedef tuple FooT;
typedef map MapT;

int main(int, char*[])
{
  MapT m;

  // put a value in the map
  {
    FooT f(nullptr, 0);
    m[f] = 1337;
  }

  // retrieve a value
  int s;
  {
    FooT f(nullptr, 0);
    auto i = m.find(f);
    if (i != m.end())
    {
      // VS2010 says:
      // error C2440: 'initializing' : 
      // cannot convert from 'const FooT' to 'int *'
      s = i->second;
    }
  }

  return 0;
}
C++ Programming

Post navigation

Previous post
Next post

Related Posts

Clang/GCC weirdness

5 February, 201530 June, 2015

Consider the following code: #include #include using namespace std; // base template template struct what_type { void operator()() { cout

Read More

“In-place” might be less in-place than you think

5 May, 2015

The intuitive view of algorithms that work in-place is that (it sounds obvious) they don’t use any extra space. Canonically in C/C++ we think of something like reversing an array, or that interview staple, removing spaces from an ASCII string, which we might write as: int remove_spaces(char *s) { char…

Read More

Thoughts on Default Construction

16 August, 2017

What does default construction mean? Why do we write default constructors? When and why should we require them? I’ve been pondering these questions lately. One of the great things that C++ gets right is that it grants programmers the ability to create types that behave like built-in types. Many languages…

Read More

Comment

  1. Alan says:
    20 February, 2015 at 12:11 pm

    Something odd… if i replace

    m[f] = 1337;
    

    with either

    m.insert(std::make_pair(FooT(nullptr, 0), 1337));
    

    or

    m.insert(std::make_pair(f, 1337));
    

    It works fine (compiles and behaves like it should at runtime), even though the error reported by VS when it doesnt work points at the s assignment line!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

©2026 Why is a raven like a writing desk? | WordPress Theme by SuperbThemes