std::pair<void(whatever::*)(), whatever*> memberptr;
char any1[sizeof(std::pair<void(*)(),void*>)];
char any2[sizeof(std::pair<void(whatever::*)(), whatever*>)];
- TaskUnion() {}
- ~TaskUnion() {}
+ TaskUnion() { /* Nothing to do */}
+ ~TaskUnion() { /* Nothing to do */}
};
#endif
}
public:
-
- Task() {}
- Task(std::nullptr_t) {}
+ Task() { /* Nothing to do */}
+ explicit Task(std::nullptr_t) { /* Nothing to do */}
~Task()
{
this->clear();
{
const static TaskVtable vtable {
// Call:
- [](TaskUnion& buffer, Args... args) -> R {
+ [](TaskUnion& buffer, Args... args) {
F* src = reinterpret_cast<F*>(&buffer);
F code = std::move(*src);
src->~F();
- code(std::forward<Args>(args)...);
+ return code(std::forward<Args>(args)...);
},
// Destroy:
std::is_trivially_destructible<F>::value ?
{
const static TaskVtable vtable {
// Call:
- [](TaskUnion& buffer, Args... args) -> R {
+ [](TaskUnion& buffer, Args... args) {
// Delete F when we go out of scope:
std::unique_ptr<F> code(*reinterpret_cast<F**>(&buffer));
return (*code)(std::forward<Args>(args)...);