Not all terminal devices support all capabilities. Once upon a very long time ago, "terminal device" referred to an actual piece of hardware; now it refers to an abstract device created by the OS or other software on top of actual hardware.
Because of this, you can run into a few different "terminal devices" on the same hardware (and it is the same few on all common hardware). The first is a VT (virtual terminal, aka. a VC, virtual console), which is the basic "linux console" you get outside of a GUI context; this is based on emulating a VT100, which is a real (old) hardware terminal (I would guess the "VT" there stands for "video terminal", since it wasn't virtual). There aren't any alternatives to this AFAIK.
The linux console does not support smcup/tmcup perhaps because the console is really a line interface, as opposed to a screen interface. However, there are screen interface libraries (such as ncurses) that operate within the terminal emulator (as opposed to something like X windows, which does not -- it supplants the VT); most complex console apps use something like that (
dialog is more primitive). These are called terminal or console apps (as opposed to pure command-line apps) and includes editors like nano, vim, and emacs.
You can tell smcup is not supported because, as documented in
man tput, 1 is returned to indicate this capability is not supported.
> tput smcup
> echo $?
That's in a VT. However, X based terminal emulators have more capabilities. If you try
tput smcup in a GUI terminal, it will work. There are various flavours of GUI terminal, usually associated with specific DEs (desktop environments) but I think all of them should be fine with this. It works for me on raspian using the XFCE Terminal (it shouldn't matter much whether you use that or something else), which
tput longname reports as an "xterm terminal emulator (X Window System)" -- pretty sure most GUI terminals will do the same.