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 @@ ...@@ -18,15 +18,20 @@
namespace folly { namespace folly {
namespace observer { namespace observer {
namespace detail {
template <typename Observable, typename Traits> template <typename Observable, typename Traits>
class ObserverCreator<Observable, Traits>::Context { class ObserverCreatorContext {
using T = typename Traits::element_type;
public: public:
template <typename... Args> template <typename... Args>
Context(Args&&... args) : observable_(std::forward<Args>(args)...) { ObserverCreatorContext(Args&&... args)
: observable_(std::forward<Args>(args)...) {
updateValue(); updateValue();
} }
~Context() { ~ObserverCreatorContext() {
if (value_.copy()) { if (value_.copy()) {
Traits::unsubscribe(observable_); Traits::unsubscribe(observable_);
} }
...@@ -86,6 +91,8 @@ class ObserverCreator<Observable, Traits>::Context { ...@@ -86,6 +91,8 @@ class ObserverCreator<Observable, Traits>::Context {
std::mutex updateMutex_; std::mutex updateMutex_;
}; };
} // namespace detail
template <typename Observable, typename Traits> template <typename Observable, typename Traits>
template <typename... Args> template <typename... Args>
ObserverCreator<Observable, Traits>::ObserverCreator(Args&&... args) ObserverCreator<Observable, Traits>::ObserverCreator(Args&&... args)
......
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
namespace folly { namespace folly {
namespace observer { namespace observer {
namespace detail {
template <typename Observable, typename Traits>
class ObserverCreatorContext;
}
template <typename Observable> template <typename Observable>
struct ObservableTraits { struct ObservableTraits {
using element_type = using element_type =
...@@ -50,7 +55,7 @@ class ObserverCreator { ...@@ -50,7 +55,7 @@ class ObserverCreator {
Observer<T> getObserver() &&; Observer<T> getObserver() &&;
private: private:
class Context; using Context = detail::ObserverCreatorContext<Observable, Traits>;
std::shared_ptr<Context> context_; 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