Iteration is supported for all types (weak ptrs are skipped and iterated as shared pointers): class FMySelection : TSelectionSetBase{}; FMySelection& Selection = ...; for (FViewModelPtr ViewModel : Selection) { //...; }