On Thursday, 5 February 2015 at 14:43:40 UTC, Steven Schveighoffer wrote:
On 2/4/15 1:46 AM, Zach the Mystic wrote:
It's a bikeshed argument, but why not:

pragma(inline, always);  // warn if unable to inline
pragma(inline, never);
pragma(inline);        // revert to default behavior

....?

I know `true` and `false` are keywords, but why confuse people? What is
a "true" inline?

enum always = true;
enum never = false;

-Steve

Actually, the better reason is that, as subsequently clarified, the pragma accepts a boolean expression, rather than just `true` or `false`, allowing for greater flexibility. Accepting an integer, for 3+ inlining strategies, would allow even more, but it might not carry its own weight (same with enum always = true;, because of namespace pollution). My gut says that an integer is better, but I don't know if there really are more than 3 good inlining strategies.

A more general approach would be:

enum {
  inlineOff,
  inlineOn,
  inlineDefault,
  codePathHot,
  codePathCold
}

pragma(optimize, inlineOn);
pragma(optimize, codePathHot);

You'd get everything here, with options to add more later. Note that codePathCold/Hot need not cancel inlineOff/On/Default, as they could be implemented as orthogonally.

Reply via email to