Add a tag type for in-place construction
authorAlexey Spiridonov <lesha@fb.com>
Mon, 9 Nov 2015 19:16:11 +0000 (11:16 -0800)
committerfacebook-github-bot-9 <folly-bot@fb.com>
Mon, 9 Nov 2015 20:20:21 +0000 (12:20 -0800)
commit7c4e381ec6b27e098b1c69f659e10c9ac09c4126
tree8909615aa9504096329bced0f3012589452096a6
parenta93b1f39a4e39fef73ffad8a9725e46bd93b7b07
Add a tag type for in-place construction

Summary: Without this tag type, it's impossible to use `Synchronized` with types like:

```
struct A {
  A(int, const char*);
  A(const A&) = delete;
  A& operator=(const A&) = delete;
  A(A&&) = delete;
  A& operator=(A&&) = delete;
};
```

In-place construction solves this problem. Usage:

```
Synchronized a(construct_in_place, 5, "c");
```

Reviewed By: nbronson

Differential Revision: D2610071

fb-gh-sync-id: 251fe8f8f6a2d7484dda64cf04dcacb998145230
folly/Synchronized.h
folly/Traits.h
folly/test/SynchronizedTest.cpp
folly/test/SynchronizedTestLib-inl.h
folly/test/SynchronizedTestLib.h