Scope of constants - available in menus?

After experimenting with basic Menus, I've decided that it's not possible to use constants in static menu expressions. Can anyone confirm or deny this?

I thought this might work at first but it had lots of problems with my kVerbosity constant - despite compilation, perhaps it's not substituted in the menu?
    Submenu "Set verbosity"
        "\\M0::Display current level", print num2istr(NumVarOrDefault("root:Packages:LTverbosity", kVerbosity))
        "\\M0::0 | Silent", /Q, lar_tools#setVerbosity(0)
        "\\M0::1 | Errors only", /Q, lar_tools#setVerbosity(1)
        "\\M0::2 | Updates on", /Q, lar_tools#setVerbosity(2)
    End


This version does work. I made my parameter optional and changed the return to a string reflecting current state
    Submenu "Set verbosity"
        "\\M0::Display current level", print lar_tools#setVerbosity()
        "\\M0::0 | Silent", /Q, print lar_tools#setVerbosity(level=0)
        "\\M0::1 | Errors only", /Q, print lar_tools#setVerbosity(level=1)
        "\\M0::2 | Updates on", /Q, print lar_tools#setVerbosity(level=2)
    End

This perplexed me for quite a while - it'd be helpful to understand exactly why so I can avoid running into the same mistake


Also, here's the revised function that's called if that helps:
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
// setVerbosity( level )
// 
// Optional parameters
//  variable    level   numeric level already defined in constants (default: don't change the level)
//                  0=kSilent   1=kError        2=kUpdate
//
// Returns string indicating verbosity level when function ends
 Function/S setVerbosity( [level] )
    variable level                                              // set to this level   
    If ( level<0 || level>kUpdate )                                 // if level out of range
        return "Verbosity level was not changed"                        // fail
    endif
    NVAR/Z verbose = root:Packages:LTverbosity              // look up global holding current level
    If (!NVAR_exists(verbose))                                  // if not found
        DFREF savDF = GetDataFolderDFR()                        // save this spot
        NewDataFolder/O/S root:Packages                         // make/switch to Packages folder
        variable/G LTverbosity = kVerbosity                         // create variable & set to hardcoded default
        SetDataFolder savDF                                         // return to prior location
    endif
    If (ParamIsDefault(level))                                  // if level wasn't specified
        return "Verbosity is at level "+num2istr(verbose)               // return current level
    else                                                    // otherwise
        verbose = level                                             // set global to new level
        return "Verbosity set to level "+num2istr(level)                // return modified level
    endif
End