use traits to avoid template specialization
use traits to avoid template specialization

OnBeep/FakeIt,bowlofstew/FakeIt,OnBeep/FakeIt,eranpeer/FakeIt,marco-m/FakeIt,skizzay/FakeIt,amerry/FakeIt,jvff/FakeIt,jvff/FakeIt,skizzay/FakeIt,eranpeer/FakeIt,amerry/FakeIt,bowlofstew/FakeIt,marco-m/FakeIt