C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Optimized out?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ Language (Moderated)
View previous topic :: View next topic  
Author Message
Chris
Guest





PostPosted: Sat May 19, 2007 12:04 am    Post subject: Optimized out? Reply with quote



Just a quick compile time, template, optimized out question for anyone
that has time to answer this.

Let's say I define some template class like such:

typedef char One;
typedef struct { char a[2]; } Two;

template<typename B>
struct CaseOneCheck
{
private:
template<typename C> static One DepTest(typename C::CaseOne *);
template<typename C> static Two DepTest(...);

public:

enum { Dependent = sizeof(CaseOneCheck<B>::DepTest<B>(0)) ==
1 };

typedef double Type;

inline static bool Check(Type amount)
{
return(amount > 0);
}
};

Where I define:

struct WidgetOne
{
typedef bool CaseOne;
};

struct WidgetTwo
{
typedef bool CaseTwo;
};

Then, a method:

template<typename Arg,
template<typename> class CheckPolicy>
bool ShouldEnable(typename CheckPolicy<Arg>::Type type)
{
bool returnCode = true;

if(CheckPolicy<Arg>::Dependent)
{
returnCode = CheckPolicy<Arg>::Check(type);
}


return returnCode;
}


Will, since I am assuming the if(CheckPolicy<Arg>::Dependent) is
filled in to true or false at compile time, then cause the compiler to
optimize out the returnCode = CheckPolicy<Arg>::Check(type); line if
the if is false at the "second" compile stage? Or will it always be
there? The compiler I am using is g++ version 3.3.3.

That is, depending on the dependence, the code will be

ShouldEnable()
{
bool returnCode = true;
return returnCode;
}

When I use:

bool test = ShouldEnable<WidgetTwo, CheckOne>(5.5);

?


--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
Back to top
Mathias Gaunard
Guest





PostPosted: Sat May 19, 2007 6:03 pm    Post subject: Re: Optimized out? Reply with quote



On May 19, 2:04 am, Chris <foureightye...@yahoo.com> wrote:

Quote:
Will, since I am assuming the if(CheckPolicy<Arg>::Dependent) is
filled in to true or false at compile time, then cause the compiler to
optimize out the returnCode = CheckPolicy<Arg>::Check(type); line if
the if is false at the "second" compile stage? Or will it always be
there? The compiler I am using is g++ version 3.3.3.

Try it and see.
Look at the asm output.


--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
Back to top
Guest






PostPosted: Tue May 22, 2007 12:10 am    Post subject: Re: Optimized out? Reply with quote



On May 19, 2:04 am, Chris <foureightye...@yahoo.com> wrote:
Quote:
template<typename Arg,
template<typename> class CheckPolicy
bool ShouldEnable(typename CheckPolicy<Arg>::Type type) {
bool returnCode = true;
if(CheckPolicy<Arg>::Dependent) {
returnCode = CheckPolicy<Arg>::Check(type);
}
return returnCode;
}

Will, since I am assuming the if(CheckPolicy<Arg>::Dependent) is
filled in to true or false at compile time, then cause the compiler to
optimize out the returnCode = CheckPolicy<Arg>::Check(type); line if
the if is false at the "second" compile stage?

Perhaps. C++ allows both. C++ even (to a degree) allows interpreters,
in
which case the entire question is even fuzzier.
For many compilers, the answer is still "it depends"; compiler flags
do
matter. Many have so-called debug modes in which no code is ever
optimized.

The line of code must still compile, though. SFINAE doesn't work on a
line-by-line basis.

HTH,
Michiel Salters


--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ Language (Moderated) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.