Metafunction that unwraps redundant proxy / view wrapping such as with the edge_accessor backed proxy when the edge type is a proxy. More...
Static Public Member Functions | |
static View & | apply (View &view) |
Public Types | |
using | result_type = View |
Metafunction that unwraps redundant proxy / view wrapping such as with the edge_accessor backed proxy when the edge type is a proxy.
View | The view set element to inspect for redundant wrapping. |
V | Default assigned template parameter that employs SFINAE to select a specific specialization if the view set element is a view. |
The user level code need not see proxy<proxy<T>> or proxy<view<T>>, strip_df_proxy unwraps redundant wrappers (from the user workfunction's perspective) as both of the nested types in the case already represent a lightweight reference to the underlying element type. The PARAGRAPH framework adds this nesting internally, and here we remove it, prior to invocation of the workfunction via wf_invoke or wf_invoke_void.
We defer this unwrapping until this point, as we are not guaranteed that the underlying type (either a proxy or another view) has been initialized prior to the predecessor it represents being completed, a condition certainly met if we are in Task::operator() where wf_invoke is used to call the user's workfunction.
Primary template is default case, representing on an identity op.