Commit 80b2ad02 authored by Mark Williams's avatar Mark Williams Committed by Facebook Github Bot

Don't forward-declare Observable::Context

Summary:
icc gets confused on the parameter unpacking otherwise.

https://godbolt.org/z/rSRZYn

Reviewed By: yfeldblum

Differential Revision: D10147211

fbshipit-source-id: 85de581ffa4c487523a5e9f173636f74863a82ac
parent 78d7cd51
......@@ -18,15 +18,20 @@
namespace folly {
namespace observer {
namespace detail {
template <typename Observable, typename Traits>
class ObserverCreator<Observable, Traits>::Context {
class ObserverCreatorContext {
using T = typename Traits::element_type;
public:
template <typename... Args>
Context(Args&&... args) : observable_(std::forward<Args>(args)...) {
ObserverCreatorContext(Args&&... args)
: observable_(std::forward<Args>(args)...) {
updateValue();
}
~Context() {
~ObserverCreatorContext() {
if (value_.copy()) {
Traits::unsubscribe(observable_);
}
......@@ -86,6 +91,8 @@ class ObserverCreator<Observable, Traits>::Context {
std::mutex updateMutex_;
};
} // namespace detail
template <typename Observable, typename Traits>
template <typename... Args>
ObserverCreator<Observable, Traits>::ObserverCreator(Args&&... args)
......
......@@ -20,6 +20,11 @@
namespace folly {
namespace observer {
namespace detail {
template <typename Observable, typename Traits>
class ObserverCreatorContext;
}
template <typename Observable>
struct ObservableTraits {
using element_type =
......@@ -50,7 +55,7 @@ class ObserverCreator {
Observer<T> getObserver() &&;
private:
class Context;
using Context = detail::ObserverCreatorContext<Observable, Traits>;
std::shared_ptr<Context> context_;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment