Remove ConditionallyExistent, because it violates the C++ spec
Summary:
[Folly] Remove `ConditionallyExistent`, because it violates the C++ spec.
The spec says that struct and class types occupy at least one byte. But the point of this class is to occupy zero bytes when the condition is false. That can't be made to work.
GCC and Clang support an extension allowing, in some cases, structs to occupy no space at all. But it violates the spec, and MSVC does not support the extension.
There is, sort of, the possibility of empty-base-class-optimization. But it will be very painful to use, and it will only work in some cases.
Since this is broken now, and fixing it would violate the C++ spec and break this under MSVC, it's better just to remove it.
Reviewed By: nbronson, Orvid
Differential Revision:
D3696371
fbshipit-source-id:
c475c6e15d9ff1bc4c44dc7e336ce74e6db640ef